====== Find ====== ===== Commande utile ===== Permet d'afficher les fichier modifiés il y a moins d'un jour trié par ordre décroissant de leur taille (utile dans le cas d'un piratage de moins de 24h pour voir les fichiers éventuellement modifiés) find -mtime -1 -type f -exec ls -sh {} \; | sort -hr Dans la vie de tous les jours, on cherche un fichier avec un morceau de nom sans savoir si il y a des majuscules ou non find /home/user/Documents -iname '*compta*' En installant le paquet **mlocate** (variante améliorée de l'ancien locate) vous pouvez trouver plus rapidement un fichier qu'avec la commande **find** puisque celui-ci gère une base de données de tous les fichiers du système. Exemple pour la même recherche. locate compta A la différence de **find** qui fait une recherche en temps réel, **locate** se met à jour une fois par jour via la commande **updatedb** __ Purger ses vieux fichiers de plus de 10 jours qui commence par 'export' (par exemple) __ Vérifier avant de supprimer find /home/moi/backup -type f -name 'export*' -mtime +10 Ajouter simplement **-delete** pour supprimer find /home/moi/backup -type f -name 'export*' -mtime +10 -delete Un autre exemple pour supprimer tous les liens symboliques à supprimer dans des répertoires en se limitant à une recherche dans 2 sous-dossiers find daily.* -maxdepth 2 -type l -delete Pour les anciennes version Vérifier avant de supprimer find /home/moi/backup -type f -name 'export*' -mtime +10 -exec echo "rm -f {}" \; Passer à l'action pour de vrai find /home/moi/backup -type f -name 'export*' -mtime +10 -exec rm -f {} \; ===== Utilisation de la commande find ===== La commande find permet de chercher des fichiers, et eventuellement d'éxecuter une action dessus. Par exemple : find . | less affiche la liste de tous les fichiers du répertoire courant. On peut rediriger les messages d'erreur vers le //trou noir// (le périphérique /dev/null) : find . 2> /dev/null | less ou les inclures (on rassemble alors en un seul canal la sortie standard et le sortie d'erreur standard) : find . 2>&1 liste | less Les options de la commande find sont nombreuses. ^ Option ^ Signification ^ | -name | Recherche par nom de fichier. | | -iname | Recherche par nom insensible à la casse | | -type | Recherche par type de fichier. | | -user | Recherche par propriétaire. | | -group | Recherche par appartenance à un groupe. | | -size | Recherche par taille de fichier. | | -atime | Recherche par date de dernier accès en jours.| | -mtime | Recherche par date de dernière modification en jours. | | -ctime | Recherche par date de création en jours. | | -amin | Recherche par date de dernier accès en minutes.| | -mmin | Recherche par date de dernière modification en minutes. | | -cmin | Recherche par date de création en minutes. | | -perm | Recherche par autorisations d'accès. | | -links | Recherche par nombre de liens au fichier. | Pour les options -size, -atime, -mtime, -ctime et -links, il faut spécifier une valeur, précédée par le signe ''+'' pour ''supérieur à'', ''-'' pour ''inférieur à'', ou rien pour ''égal à''. Par exemple : find . -mtime -3 affiche les fichiers dont les dernières modifications remontent à moins de 3 jours (donc tous les fichiers modifiés entre aujourd'hui et il y a trois jours seront affichés). De même, +5 afficherait les fichiers dont les dernières modifications remontent à plus de 5 jours. Voici d'autres exemples d'utilisation de la commande find : Pour afficher tous les fichiers se terminant par ''.c'' : find . -name "*.c" Vous pouvez utiliser les caractères joker ''*'' pour plusieurs caractères et ''?'' pour un caractères. Utilisez les crochets pour filtrer sur un caractère. find . -name "*edmc7[345]*" N'affichera que les fichiers qui contiennent edmc73 ou edmc74 ou edmc75 Pour afficher tous les répertoires dont le nom se termine par ''s'' : find . -type d -name "*s" Pour afficher tous les fichiers, on aurait utilisé le ''-type f''. \\ Pour afficher tous les fichiers ayant une taille de 10 blocs : find . -size 10 ce qui est équivalent à demander la liste des fichiers ayant une taille de 5120 caractères : find . -size 5210c On aurait pu aussi demander la liste des fichiers ayant une taille supérieure (+200k) ou inférieure (-200k) à 200 Ko. find . -size +200k Pour afficher tous les fichiers ayant une certaine permission exprimée en octale (voir section 1.9.6 page [*]) : find . -perm 755 ou ayant au minimum les droits d'écriture pour le groupe : find . -perm -020 Pour éxecuter la commande ls -l pour chaque fichier trouvé : find . -type f -exec ls -l {} \; et pour demander confirmation avant chaque action : find . -type f -ok -exec rm {} \; Toute autre commande peut être éxecutée avec l'option -exec. Pour associer plusieurs critères avec ''-a'' ou ''-and'' pour et, ''-o'' ou ''-or'' pour ou, ''!'' ou ''-not'' pour négation. Par exemple : find . ! -user root affiche tous les fichiers n'appartenant à root, et find . \( -name '*.tex' -o -name '*.dvi' \) affiche tous les fichiers se terminant par ''.tex'' ou ''.dvi''. . On peut aussi afficher les infos que l'on veut avec printf find . -printf '%f %u:%g %a' Affichera le nom du fichier seulement suivi du user:group et dernière date d'accès Si on veux savoir combien de fichiers sont utilisés par utilisateur find . -printf '%u' | sort | uniq -c ===== Alternatives ===== **find** est récursif. Si vous voulez supprimer une liste de fichier dans un seul répertoire et donc sans supprimer les fichiers des sous répertoires, utilisez la commande **xargs** ls *fichier*.txt | xargs rm Sinon utilisez l'option ''-maxdepth'' find . -maxdepth 1 -type f