Find ou le Sherlock Unix

La commande find permet de retrouver des fichiers à partir de certains critères.

Concrètement, la commande ‘find’ scane un répertoire donné (et les elements qu’il contient) à la recherche de fichiers qui satisfont certains critères. Parmi ceux-ci, le nom, la taille, le propriétaire, le mode ou encore la date de dernière modification peuvent être testés. Lorsqu’un fichier cadre avec les critères précisés ‘find’ peut lui associer une action.

La commande ‘find’ à la structure suivante:

> find [directory] [search expression] [actions]

L’instruction ci-dessous aura par exemple pour effet de chercher un fichier dont le nom correspond à la chaîne de caractères ‘project’ à partir du répertoire ‘/usr’ et, si le résultat est positif, d’imprimer sur la sortie standard le chemin d’accès du fichier concerné.

> find /usr -name project -print

L’instruction ci-dessous recherchera, elle, les fichiers dont le nom se termine par la chaîne de caractères ‘.jpg’ à partir du répertoire courant et, si le résultat est positif, affichera sur la sortie standard le chemin d’accès des fichiers concernés.

> find. -name ‘*.jpg’ -print

Les principaux critères de recherche possibles pour la commande ‘find’:

-name [filename]
recherche sur le nom du fichier

-perm [mode]
recherche sur les droits d’accès

-user [username]
recherche sur le propriétaire

-group [groupname]
recherche sur le groupe

-size [value][c]
recherche sur la taille en nombre de blocs (un bloc représentant 512 bytes ou 1/2 kb – si la lettre c est précisée, le calcul se fait sur le nombre de caractères)

-atime [value]
recherche par date de dernier accès (value représentant ici le nombre de jours depuis le dernier accès)

-mtime [value]
recherche par date de dernière modification (value représentant le nombre de jours depuis là denière modification)

-ctime [value]
recherche par date de création (value représentant le nombre de jours depuis la création)

Ces critères de recherche peuvent être combinés entre eux grâce aux opérateurs -a (ET) et -o (OU inclusif).

Exemples d’instructions de recherche

> find / -name Article1 -type f -print
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, son chemin d’accès sera affiché sur la sortie standard.

> find / -name Article1 -type f -exec chmod 755 {} ;
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, ses permissions sont modifiées (mode 755 c’est-à-dire: rwxr-xr-x). La paire d’accolade ‘{}’ implique une substitution du nom du fichier en traitement et la suite de caractères ‘;’ indique que la commande exec est clôturée.

> find. -name ‘[A-Z]*[0-9]’ -type f -print
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom commence par une lettre majuscule et se termine par un chiffre.

> find /users -size +100000c -atime +7
Cette instruction recherche, à partir du répertoire ‘/users’, tous les fichiers dont la taille est supérieur à 100.000 caractères et qui n’ont pas été modifiés depuis plus de 7 jours.

> find. ( -name ‘*.log’ -a -mtime +7 ) -exec rm -f {} ;
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom se termine par ‘.log’ et qui n’ont pas été modifiés depuis plus de 7 jours. Les fichiers qui sont trouvés seront effacés tel que précisé dans la commande -exec.
Dans cette instruction, les paranthèses délimitent l’expression de recherche et l’opérateur ‘-a’ combine les deux critères fournis (-name et -mtime) selon un ‘ET’ logique.