Outils pour utilisateurs

Outils du site


Panneau latéral

linux:find (lu 28603 fois)

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

Autre exemple de filtre avec -wholename

find . -wholename '*/graphjs/*.js' -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

linux/find.txt · Dernière modification : de edmc73