La Commande "Find"

La commande find sous Linux est utilisée pour rechercher des fichiers. Elle lance une recherche récursive dans laquelle un ou plusieurs répertoires sont explorés selon certains critères. La commande find Linux est un outil précis pour rechercher fichiers et répertoires et est prise en charge sur presque toutes les distributions Linux

Aperçu de la commande find sous Linux

La commande find est déclenchée directement par le biais d’une ligne de commande dans le terminal ou la console. Voici la syntaxe générale de la commande find sous Linux :

find <chemin> <option>

On trouve d’abord la commande elle-même, suivie du chemin d’accès au répertoire et d’un nombre variable d’options de recherche. Une option de recherche est composée d’un trait d’union immédiatement suivi du nom de l’option. Celui-ci est suivi d’un espace et de la valeur de l’option. Voici un aperçu des options de recherche les plus fréquemment utilisées :

OptionsSignifications
-name, -inameRecherche par nom de fichier
-typeRecherche par type de fichier
-size, -emptyRecherche par taille de fichier
-ctime, -mtime, -atimeRecherche par date de création, date de dernière modification ou date de dernier accès
-user, -groupRecherche par propriétaire ou par groupe
-permRecherche par autorisations d’accès


Plusieurs options de recherche peuvent être combinées. Une opération AND (et) est implicitement supposée lorsque plusieurs options sont utilisées. Elle peut également être écrite. De plus, un lien OR (ou) peut être utilisé et une condition peut être annulée :

OptionsSignifications
-andLes résultats de la recherche doivent remplir les deux conditions
-orLes résultats de la recherche doivent correspondre à au moins l’une des deux conditions
-notIgnore la condition suivante


Notez que dans les exemples de code suivants, vous devez remplacer les <termes génériques> par des valeurs réelles afin d’exécuter les exemples.

Rechercher et traiter des fichiers avec la commande Linux find

Jusqu’à présent, nous nous sommes limités à la recherche de fichiers sous Linux. Cependant, de nombreux cas d’utilisation nécessitent un traitement massif des fichiers trouvés. C’est le cas pour la réparation des droits d’accès sur des logiciels comme WordPress ou la suppression de fichiers après un piratage. On utilise également la commande find pour ces cas d’utilisation.Considérons le modèle général pour exécuter une commande pour chaque fichier trouvé. On utilise l’option « -exec », suivie d’une commande Linux et de ses options. La commande entière est complétée par le texte « {} \; », qui reste toujours le même :

find <chemin> <option> -exec <commande_et_options> {} \;

Notez que la commande est exécutée sans requête. En fonction des options de recherche sélectionnées et de la commande donnée, l’exécution de la commande find avec l’option « -exec » peut endommager sérieusement le système.Afin de limiter les risques, on peut utiliser l’option « -ok », similaire à l’option « -exec ». Elle oblige l’utilisateur à confirmer la modification de chaque fichier trouvé :

find <chemin> <option> -ok <commande_et_options> {} \;

Par précaution, nous limitons dans les exemples suivants la profondeur de récursivité à un seul sous-répertoire en utilisant « -maxdepth 1 ». NoteAttention : soyez prudent avec les exemples suivants. Nous vous recommandons fortement de créer un dossier spécifique pour les essayer. Avant d’exécuter les exemples, accédez à ce dossier pour vous assurer de ne pas endommager le système !

Filtrer par propriétaire, groupe et droits d’accès avec la commande Linux find

Sous Linux, chaque fichier se voit attribuer un utilisateur propriétaire. De plus, chaque fichier appartient à un groupe d’utilisateurs spécifique. Sur cette base, certaines autorisations sont définies pour chaque fichier. Il est possible de filtrer avec la commande find pour trouver des fichiers sous Linux selon toutes ces informations. Voici un aperçu des options de recherche utilisées :

OptionsSignifications
-userFiltrer par propriétaire
-groupFiltrer par groupe
-permFiltrer par droits d’accès


Pour rechercher des fichiers appartenant à lutilisateur root (ou super utilisateur), on utilise l’option de recherche « -user » suivie de la valeur « root » :

find . -user root

Pour rechercher des fichiers appartenant à l’utilisateur qui est en train de faire la recherche, on utilise l’option de recherche « -user » suivie de l’expression « $ (whoami) ». Ce terme générique correspond au nom de l’utilisateur connecté :

find . -user $(whoami)

Pour rechercher des fichiers appartenant au groupe administrateur, on utilise l’option de recherche « -group » suivie de la valeur « admin » :

find . -group admin

En plus du filtrage par propriétaire et par groupe, il est également possible de filtrer par droits daccès. Une suite de trois nombres du système octal est utilisée. Les valeurs fréquemment utilisées sont « 644 », « 755 », etc. Le premier nombre définit les droits d’accès pour le propriétaire, le second pour le groupe et le troisième pour les autres utilisateurs. Chacun des trois nombres octaux est généré en ajoutant les droits individuels. Nous expliquons exactement comment cela fonctionne dans notre article sur l’attribution des droits sur un répertoire avec chmod.Pour trouver des fichiers entièrement accessibles à nimporte quel utilisateur, on utilise l’option de recherche « -perm » suivie de la valeur « 777 » :

find . -perm 777

Pour trouver des fichiers qui ne sont entièrement accessibles quau propriétaire, on utilise l’option de recherche « -perm » suivie de la valeur « 700 »:

find . -perm 700

Il est également possible d’utiliser la commande find sous Linux pour rechercher des fichiers qui ont au moins certaines autorisations spécifiées. Pour ce faire, on met immédiatement un signe moins devant le nombre octal :

find . -perm -007


Limiter la profondeur de récursivité de la commande Linux find

Normalement, la commande Linux find parcourt tous les sous-répertoires de manière récursive. Cependant, il peut être utile de limiter la profondeur de la récursivité. Pour ce faire, on utilise les options de recherche « -maxdepth » et « -mindepth » :

OptionsSignifications
-maxdepthProfondeur de récursivité maximale
-mindepthProfondeur de récursivité minimale

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires qui ne sont pas à plus de deux niveaux sous le répertoire actuel, on utilise la commande suivante :

find . -type f -maxdepth 2 -size +50M

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires entre trois et cinq niveaux inférieurs au répertoire actuel, on utilise la commande suivante :

find . -type f -mindepth 3 -and -maxdepth 5 -size +50M


Modifier le propriétaire et le groupe avec la commande Linux find

Pour définir le propriétaire et le groupe de tous les fichiers et répertoires sur la valeur « www-data », on utilise la commande find suivante avec la commande chown :

find . -maxdepth 1 -exec chown www-data:www-data {} \;


Modifier les autorisations des fichiers avec la commande Linux find

Pour rechercher des fichiers avec les droits d’accès « 777 » et les changer en « 664 », on utilise la commande find suivante avec la commande chmod :

find . -type f -maxdepth 1 -perm 777 -exec chmod 664 {} \;

Pour changer les droits de tous les répertoires en « 755 », on utilise la commande find suivante avec la commande chmod :

find . -type d -maxdepth 1 -exec chmod 755 {} \;


Utiliser la commande Linux find pour supprimer les répertoires et fichiers vides

Il est également possible d’utiliser la commande find pour supprimer les fichiers et répertoires trouvés. Par précaution, nous ne montrons cette possibilité ici que pour les fichiers et répertoires vides. De plus, au lieu du paramètre « -exec », on utilise le paramètre « -ok » pour obliger l’utilisateur à consentir explicitement à la suppression.Pour supprimer les répertoires vides sous Linux, on utilise la commande find suivante avec la commande rmdir :

find . -type d -maxdepth 1 -empty -ok rmdir {} \;

Pour supprimer les fichiers vides sous Linux, on utilise la commande find suivante avec la commande rm :

find . -type f -maxdepth 1 -empty -ok rm {} \;


Limiter la recherche à un répertoire spécifique

Voyons d’abord comment limiter la recherche à un répertoire spécifique. Pour rechercher dans le répertoire courant, on utilise le point « . » comme chemin d’accès au répertoire :

find . <option>

Pour rechercher dans son répertoire personnel, on utilise le tilde « ~ » comme chemin d’accès au répertoire :

find ~ <option>

Vous pouvez également rechercher l’ensemble du système à l’aide de find sous Linux. Cependant, en raison du grand nombre de fichiers et éventuellement de répertoires, cela peut prendre beaucoup de temps. Pour rechercher dans tout le système, on utilise la barre oblique « / » comme chemin d’accès au répertoire :

find / <option>


Personnaliser les résultats de la recherche

Les résultats de recherche de la commande find Linux peuvent être très longs. Il est donc souvent utile de paramétrer la présentation des résultats. On n’utilise alors pas les options de la commande pour cela, mais ce que l’on appelle des « tubes » (ou « pipelines » ou « pipes »). Sous Linux, ceux-ci sont utilisés pour utiliser la sortie d’une commande comme entrée d’une autre commande.Pour afficher les résultats par page, on transmet la sortie de la commande find à la commande less :

find <chemin> <option> | less

Pour compter le nombre de résultats, on transmet la sortie de la commande find à la commande wc avec l’option « -l »:

find <chemin> <option> | wc -l

Afin de ne sortir que les premiers ou les derniers résultats de recherche, on transmet la sortie de la commande find aux commandes « head » et « tail ». On entre le paramètre « -n » suivi du nombre de résultats de recherche souhaité :

find <chemin> <option> | head -n <nombre>
find <chemin> <option> | tail -n <nombre>


Rechercher des fichiers sur Linux : cas d’utilisation simples

Les exemples suivants limitent la recherche au répertoire courant et toute sa descendance. Utilisez la commande cd sur la ligne de commande pour accéder à n’importe quel répertoire. Pour essayer simplement les exemples, accédez d’abord à votre dossier utilisateur :

cd ~


Filtrer par nom de fichier avec la commande find Linux

Pour filtrer par nom de fichier, utilisez l’option « -name ». Le nom de fichier doit être exact et la casse respectée :

find . -name <fichier>

Ici, on recherche un fichier avec le nom exact « .gitignore » :

find . -name .gitignore

Pour ignorer la différence entre les majuscules et les minuscules, on utilise l’option « -iname ». Le « i » signifie « insensible », pour « insensible à la casse », c’est à dire qui ne tient pas compte des majuscules et minuscules :

find . -iname <fichier>

Il est généralement plus pratique deffectuer dabord une recherche insensible à la casse et de n’utiliser l’option « -name » que si la recherche avec « -iname » renvoie à trop de résultats.Pour effectuer une recherche non pas à partir d’un nom de fichier exact mais une partie du nom seulement, on utilise lastérisque pour remplacer les parties manquantes et on écrit la recherche entre guillemets. L’astérisque permet de remplacer tout texte manquant. Ici, on recherche des fichiers et des répertoires dont les noms contiennent le texte « git » :

find . -iname "*git*"


Filtrer par type de fichier à l’aide de la commande find Linux

Un aspect célèbre de la philosophie UNIX est le principe selon lequel « tout est un fichier ». C’est aussi valable sous Linux. Le terme « fichier » est défini de manière plus large que dans l’usage courant. Ainsi, les répertoires sont également considérés comme des fichiers sous Linux. Pour éviter toute confusion, le terme plus précis de « descripteur de fichier » est parfois utilisé.


Types de fichierSignifications
fFichier („file“)
dRépertoire („directory“)
lLien symbolique („symlink“)


Pour ninclure que les fichiers dans les résultats de la recherche, on utilise l’option « -type » suivie de la valeur « f »:

find . -type f

Pour ninclure que les répertoires dans les résultats de la recherche, on utilise l’option « -type » suivie de la valeur « d »:

find . -type d

Pour filtrer les extensions de fichiers, on utilise l’option « -iname » et l’astérisque comme terme générique.Pour trouver tous les fichiers avec l’extension jpeg ou JPEG :

find . -type f -iname "*.jpeg"

Pour trouver tous les fichiers avec l’extension jpeg/JPEG ou jpg/JPG :

find . -type f -iname "*.jpeg" -or -iname "*.jpg"


Filtrer par taille à l’aide de find sous Linux

Un fichier sous Linux contient plusieurs informations. Cela comprend généralement au moins les éléments suivants :

  • Le nom
  • Le type de fichier
  • La taille
  • Les dates de création ou de dernière modification
  • Le propriétaire ou le groupe
  • Les droits d’accès

Tous ces éléments peuvent être filtrés avec la commande find et les options correspondantes. Pour filtrer selon la taille dun fichier, on utilise l’option « -size » suivie d’une spécification de la taille.La commande find suivante renvoie tous les fichiers d’une taille d’au moins 700 mégaoctets :

find . -size +700M

La commande suivante renvoie des fichiers inférieurs à 500 mégaoctets :

find . -size -500M

La commande suivante renvoie des fichiers d’une taille comprise entre 400 et 500 mégaoctets :

find . -size +400M -and -size -500M

En plus de spécifier une taille exacte ou selon un ordre de grandeur, il est possible de rechercher des fichiers vides avec l’option « -empty » :

find . -type f -empty

Cette option fonctionne également pour les répertoires :

find . -type d -empty


Filtrer par dates avec la commande Linux find

Le système d’exploitation gère le système de données et enregistre l’accès aux fichiers. Différentes informations sur les moments de création et de modification des fichiers sont enregistrées. Linux enregistre les heures et dates de création, de la dernière modification et du dernier accès à un fichier. Avec la commande find sous Linux, il est possible de filtrer ces informations. Voici un aperçu des options de recherche les plus fréquemment utilisées :

OptionsSignifications
-ctime, -cminFiltrer par date de création („Creation“)
-mtime, -mminFiltrer par date de modification („Modification“)
-atime, -aminFiltrer par date de dernier accès au fichier („Access“)


Pour trouver les fichiers qui ont été modifiés il y a un jour, on utilise l’option de recherche « -mtime », suivie de la valeur « 1 »:

find . -type f -mtime 1

Pour trouver les fichiers créés il y a plus de 100 jours, on utilise l’option de recherche « -ctime », suivie de la valeur « +100 » :

find . -type f -ctime +100

Comme pour le filtrage par taille de fichier, les options de recherche peuvent être combinées pour couvrir une fourchette de dates. Pour trouver les fichiers qui ont été consultés il y a trois à cinq jours, on utilise l’option de recherche « -atime » deux fois, chacun avec les valeurs « +2 » et « -6 ». L’option « -and » est explicite et donc facultative :

find . -type f -atime +2 -and -atime -6

Pour trouver les fichiers qui ont été modifiés il y a moins de cinq minutes, on utilise l’option de recherche « -mmin » avec la valeur « -5 » :

find . -type f -mmin -5

Pour rechercher des fichiers appartenant à lutilisateur root (ou super utilisateur), on utilise l’option de recherche « -user » suivie de la valeur « root » :

find . -user root

Pour rechercher des fichiers appartenant à l’utilisateur qui est en train de faire la recherche, on utilise l’option de recherche « -user » suivie de l’expression « $ (whoami) ». Ce terme générique correspond au nom de l’utilisateur connecté :

find . -user $(whoami)

Pour rechercher des fichiers appartenant au groupe administrateur, on utilise l’option de recherche « -group » suivie de la valeur « admin » :

find . -group admin

Pour trouver des fichiers entièrement accessibles à nimporte quel utilisateur, on utilise l’option de recherche « -perm » suivie de la valeur « 777 » :

find . -perm 777

Pour trouver des fichiers qui ne sont entièrement accessibles quau propriétaire, on utilise l’option de recherche « -perm » suivie de la valeur « 700 »:

find . -perm 700

Il est également possible d’utiliser la commande find sous Linux pour rechercher des fichiers qui ont au moins certaines autorisations spécifiées. Pour ce faire, on met immédiatement un signe moins devant le nombre octal :

find . -perm -007

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires qui ne sont pas à plus de deux niveaux sous le répertoire actuel, on utilise la commande suivante :

find . -type f -maxdepth 2 -size +50M

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires entre trois et cinq niveaux inférieurs au répertoire actuel, on utilise la commande suivante :

find . -type f -mindepth 3 -and -maxdepth 5 -size +50M