Linux est un système d’ex­ploi­ta­tion open source qui a été créé comme une al­ter­na­tive gratuite à UNIX. Comme avec UNIX, la ligne de commande est un outil fon­da­men­tal lorsque vous tra­vail­lez avec Linux. L’uti­li­sa­teur entre les commandes dans une ligne de commande qui les exécute.

La commande find sous Linux est utilisée pour re­cher­cher des fichiers. Elle lance une recherche récursive dans laquelle un ou plusieurs ré­per­toires sont explorés selon certains critères. La commande find Linux est un outil précis pour re­cher­cher fichiers et ré­per­toires et est prise en charge sur presque toutes les dis­tri­bu­tions Linux.

Conseil

Optez pour l’hé­ber­ge­ment Linux de IONOS, créez un lieu sûr pour vos projets Web.

Aperçu de la commande find sous Linux

La commande find est dé­clen­chée di­rec­te­ment 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>
Note

Attention : soyez prudent lors de l’entrée de commandes dans le terminal ou la console. L’exécution d’une mauvaise commande peut, dans certains cas, en­dom­ma­ger votre système !

On trouve d’abord la commande elle-même, suivie du chemin d’accès au ré­per­toire et d’un nombre variable d’options de recherche. Une option de recherche est composée d’un trait d’union im­mé­dia­te­ment 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é­quem­ment utilisées :

Options Sig­ni­fi­ca­tions
-name, -iname Recherche par nom de fichier
-type Recherche par type de fichier
-size, -empty Recherche par taille de fichier
-ctime, -mtime, -atime Recherche par date de création, date de dernière mo­di­fi­ca­tion ou date de dernier accès
-user, -group Recherche par pro­prié­taire ou par groupe
-perm Recherche par au­to­ri­sa­tions d’accès

Plusieurs options de recherche peuvent être combinées. Une opération AND (et) est im­pli­ci­te­ment 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 :

Options Sig­ni­fi­ca­tions
-and Les résultats de la recherche doivent remplir les deux con­di­tions
-or Les résultats de la recherche doivent cor­res­pondre à au moins l’une des deux con­di­tions
-not Ignore 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.

Limiter la recherche à un ré­per­toire spé­ci­fique

Voyons d’abord comment limiter la recherche à un ré­per­toire spé­ci­fique. Pour re­cher­cher dans le ré­per­toire courant, on utilise le point « . » comme chemin d’accès au ré­per­toire :

find . <option>

Pour re­cher­cher dans son ré­per­toire personnel, on utilise le tilde « ~ » comme chemin d’accès au ré­per­toire :

find ~ <option>

Vous pouvez également re­cher­cher l’ensemble du système à l’aide de find sous Linux. Cependant, en raison du grand nombre de fichiers et éven­tuel­le­ment de ré­per­toires, cela peut prendre beaucoup de temps. Pour re­cher­cher dans tout le système, on utilise la barre oblique « / » comme chemin d’accès au ré­per­toire :

find / <option>
Note

Attention : soyez ex­trê­me­ment prudent lorsque vous utilisez la commande find Linux en com­bi­nai­son avec l’option « -exec » sur l’ensemble du système !

Per­son­na­li­ser 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 pa­ra­mé­trer la pré­sen­ta­tion 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>

Re­cher­cher des fichiers sur Linux : cas d’uti­li­sa­tion simples

Les exemples suivants limitent la recherche au ré­per­toire courant et toute sa des­cen­dance. Utilisez la commande cd sur la ligne de commande pour accéder à n’importe quel ré­per­toire. Pour essayer sim­ple­ment les exemples, accédez d’abord à votre dossier uti­li­sa­teur :

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 dif­fé­rence entre les ma­jus­cules et les mi­nus­cules, on utilise l’option « -iname ». Le « i » signifie « in­sen­sible », pour « in­sen­sible à la casse », c’est à dire qui ne tient pas compte des ma­jus­cules et mi­nus­cules :

find . -iname <fichier>

Il est gé­né­ra­le­ment plus pratique deffectuer dabord une recherche in­sen­sible à 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 las­té­risque pour remplacer les parties man­quantes et on écrit la recherche entre guil­le­mets. L’as­té­risque permet de remplacer tout texte manquant. Ici, on recherche des fichiers et des ré­per­toires dont les noms con­tien­nent 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 phi­lo­so­phie 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é­per­toires sont également con­si­dé­rés comme des fichiers sous Linux. Pour éviter toute confusion, le terme plus précis de « des­crip­teur de fichier » est parfois utilisé.

Lorsqu’on parle de « type de fichier » sous Linux, il ne s’agit pas de faire la dif­fé­rence entre un fichier Excel ou une image JPEG. Il s’agit plutôt de dis­tin­guer les dif­fé­rents types de des­crip­teurs de fichiers qui existent sous Linux. La commande Linux find fournit l’option de recherche « -type » pour filtrer les dif­fé­rents types de fichiers. On peut donc faire la dis­tinc­tion entre les fichiers et les ré­per­toires lors de la recherche. Voici un aperçu des types de fichiers les plus cou­ram­ment utilisés :

Types de fichier Sig­ni­fi­ca­tions
f Fichier („file“)
d Ré­per­toire („directory“)
l Lien sym­bo­lique („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é­per­toires dans les résultats de la recherche, on utilise l’option « -type » suivie de la valeur « d »:

find . -type d

Pour filtrer les ex­ten­sions de fichiers, on utilise l’option « -iname » et l’as­té­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 in­for­ma­tions. Cela comprend gé­né­ra­le­ment au moins les éléments suivants :

  • Le nom
  • Le type de fichier
  • La taille
  • Les dates de création ou de dernière mo­di­fi­ca­tion
  • Le pro­prié­taire ou le groupe
  • Les droits d’accès

Tous ces éléments peuvent être filtrés avec la commande find et les options cor­res­pon­dantes. Pour filtrer selon la taille dun fichier, on utilise l’option « -size » suivie d’une spé­ci­fi­ca­tion de la taille.

La commande find suivante renvoie tous les fichiers d’une taille d’au moins 700 mé­gaoc­tets :

find . -size +700M
Note

Le filtrage par taille ne fonc­tionne que pour les fichiers. Aucune taille n’est stockée dans le système de fichiers pour les ré­per­toires. À la place, la taille est calculée de manière récursive si né­ces­saire.

Les in­for­ma­tions sur la taille dun fichier sont affichées avec un nombre suivi dune unité. Voici un aperçu des unités dis­po­nibles :

Unités Sig­ni­fi­ca­tions
c Octets
k Ki­looc­tets
M Mé­gaoc­tets
G Gi­gaoc­tets
b Blocs de 512 octets

Ces in­for­ma­tions cor­res­pon­dent à la taille exacte du fichier. C’est peu pratique car la taille exacte du fichier recherché est souvent inconnue. Re­cher­cher selon un ordre de grandeur fait plus sens. Pour cela, le numéro est précédé d’un signe mo­di­fi­ca­teur :

Mo­di­fi­ca­teurs Sig­ni­fi­ca­tions
+ Le fichier est plus grand que la taille spécifiée
- Le fichier est plus petit que la taille spécifiée

La commande suivante renvoie des fichiers in­fé­rieurs à 500 mé­gaoc­tets :

find . -size -500M

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

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

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

find . -type f -empty

Cette option fonc­tionne également pour les ré­per­toires :

find . -type d -empty

Filtrer par dates avec la commande Linux find

Le système d’ex­ploi­ta­tion gère le système de données et en­re­gistre l’accès aux fichiers. Dif­fé­rentes in­for­ma­tions sur les moments de création et de mo­di­fi­ca­tion des fichiers sont en­re­gis­trées. Linux en­re­gistre les heures et dates de création, de la dernière mo­di­fi­ca­tion et du dernier accès à un fichier. Avec la commande find sous Linux, il est possible de filtrer ces in­for­ma­tions. Voici un aperçu des options de recherche les plus fré­quem­ment utilisées :

Options Sig­ni­fi­ca­tions
-ctime, -cmin Filtrer par date de création („Creation“)
-mtime, -mmin Filtrer par date de mo­di­fi­ca­tion („Mo­di­fi­ca­tion“)
-atime, -amin Filtrer 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

Les options de recherche contenant « time » cor­res­pon­dent au nombre de jours. Les options avec « min » indiquent un nombre de minutes.

De la même manière que le filtrage par taille de fichier, il est possible d’indiquer un ordre de grandeur pour les dates. Encore une fois, les signes plus et moins sont utilisés comme mo­di­fi­ca­teurs :

Mo­di­fi­ca­teurs Sig­ni­fi­ca­tions
+ La date renvoie à plus de jours que le chiffre indiqué
- La date renvoie à moins de jours que le chiffre indiqué

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 four­chette 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 fa­cul­ta­tive :

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

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

Sous Linux, chaque fichier se voit attribuer un uti­li­sa­teur pro­prié­taire. De plus, chaque fichier ap­par­tient à un groupe d’uti­li­sa­teurs spé­ci­fique. Sur cette base, certaines au­to­ri­sa­tions sont définies pour chaque fichier. Il est possible de filtrer avec la commande find pour trouver des fichiers sous Linux selon toutes ces in­for­ma­tions. Voici un aperçu des options de recherche utilisées :

Options Sig­ni­fi­ca­tions
-user Filtrer par pro­prié­taire
-group Filtrer par groupe
-perm Filtrer par droits d’accès

Pour re­cher­cher des fichiers ap­par­te­nant à luti­li­sa­teur root (ou super uti­li­sa­teur), on utilise l’option de recherche « -user » suivie de la valeur « root » :

find . -user root

Pour re­cher­cher des fichiers ap­par­te­nant à l’uti­li­sa­teur qui est en train de faire la recherche, on utilise l’option de recherche « -user » suivie de l’ex­pres­sion « $ (whoami) ». Ce terme générique cor­res­pond au nom de l’uti­li­sa­teur connecté :

find . -user $(whoami)

Pour re­cher­cher des fichiers ap­par­te­nant au groupe ad­mi­nis­tra­teur, on utilise l’option de recherche « -group » suivie de la valeur « admin » :

find . -group admin

En plus du filtrage par pro­prié­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é­quem­ment utilisées sont « 644 », « 755 », etc. Le premier nombre définit les droits d’accès pour le pro­prié­taire, le second pour le groupe et le troisième pour les autres uti­li­sa­teurs. Chacun des trois nombres octaux est généré en ajoutant les droits in­di­vi­duels. Nous ex­pli­quons exac­te­ment comment cela fonc­tionne dans notre article sur l’at­tri­bu­tion des droits sur un ré­per­toire avec chmod.

Pour trouver des fichiers en­tiè­re­ment ac­ces­sibles à nimporte quel uti­li­sa­teur, on utilise l’option de recherche « -perm » suivie de la valeur « 777 » :

find . -perm 777

Pour trouver des fichiers qui ne sont en­tiè­re­ment ac­ces­sibles quau pro­prié­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 re­cher­cher des fichiers qui ont au moins certaines au­to­ri­sa­tions spé­ci­fiées. Pour ce faire, on met im­mé­dia­te­ment un signe moins devant le nombre octal :

find . -perm -007

Limiter la pro­fon­deur de ré­cur­si­vité de la commande Linux find

Nor­ma­le­ment, la commande Linux find parcourt tous les sous-ré­per­toires de manière récursive. Cependant, il peut être utile de limiter la pro­fon­deur de la ré­cur­si­vité. Pour ce faire, on utilise les options de recherche « -maxdepth » et « -mindepth » :

Options Sig­ni­fi­ca­tions
-maxdepth Pro­fon­deur de ré­cur­si­vité maximale
-mindepth Pro­fon­deur de ré­cur­si­vité minimale

Pour re­cher­cher des fichiers d’une taille su­pé­rieure à 50 mé­gaoc­tets et n’incluant que des ré­per­toires qui ne sont pas à plus de deux niveaux sous le ré­per­toire actuel, on utilise la commande suivante :

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

Pour re­cher­cher des fichiers d’une taille su­pé­rieure à 50 mé­gaoc­tets et n’incluant que des ré­per­toires entre trois et cinq niveaux in­fé­rieurs au ré­per­toire actuel, on utilise la commande suivante :

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

Re­cher­cher 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’uti­li­sa­tion né­ces­si­tent un trai­te­ment massif des fichiers trouvés. C’est le cas pour la ré­pa­ra­tion des droits d’accès sur des logiciels comme WordPress ou la sup­pres­sion de fichiers après un piratage. On utilise également la commande find pour ces cas d’uti­li­sa­tion.

Con­si­dé­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é­lec­tion­nées et de la commande donnée, l’exécution de la commande find avec l’option « -exec » peut en­dom­ma­ger sé­rieu­se­ment le système.

Afin de limiter les risques, on peut utiliser l’option « -ok », similaire à l’option « -exec ». Elle oblige l’uti­li­sa­teur à confirmer la mo­di­fi­ca­tion de chaque fichier trouvé :

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

Par pré­cau­tion, nous limitons dans les exemples suivants la pro­fon­deur de ré­cur­si­vité à un seul sous-ré­per­toire en utilisant « -maxdepth 1 ».

Note

Attention : soyez prudent avec les exemples suivants. Nous vous re­com­man­dons fortement de créer un dossier spé­ci­fique pour les essayer. Avant d’exécuter les exemples, accédez à ce dossier pour vous assurer de ne pas en­dom­ma­ger le système !

Modifier le pro­prié­taire et le groupe avec la commande Linux find

Pour définir le pro­prié­taire et le groupe de tous les fichiers et ré­per­toires 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 au­to­ri­sa­tions des fichiers avec la commande Linux find

Pour re­cher­cher 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é­per­toires 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é­per­toires et fichiers vides

Il est également possible d’utiliser la commande find pour supprimer les fichiers et ré­per­toires trouvés. Par pré­cau­tion, nous ne montrons cette pos­si­bi­lité ici que pour les fichiers et ré­per­toires vides. De plus, au lieu du paramètre « -exec », on utilise le paramètre « -ok » pour obliger l’uti­li­sa­teur à consentir ex­pli­ci­te­ment à la sup­pres­sion.

Pour supprimer les ré­per­toires 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 {} \;
Aller au menu principal