Comment trouver des fichiers sous Linux en utilisant la ligne de commande

find est une commande permettant de filtrer récursivement les objets du système de fichiers en fonction d’un mécanisme conditionnel simple. Utilisez find pour rechercher un fichier ou un répertoire sur votre système de fichiers. En utilisant le drapeau -exec, les fichiers peuvent être trouvés et immédiatementtraités dans la même commande.

Recherche de fichiers Linux par nom ou extension

Utilisez find à partir de la ligne de commande pour localiser un fichier spécifique par nom ou extension. L’exemple suivant recherche les fichiers *.err dans le répertoire /home/username/ et tous les sous-répertoires:

find /home/username/ -name "*.err"

Vous devriez voir une sortie similaire dans votre console:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Commandes de recherche Linux communes et syntaxe

La commande find prend généralement la forme suivante:

find options starting/path expression
  • L’attribut options contrôle le comportement et la méthode d’optimisation du processus find.
  • L’attribut starting/path définit le répertoire de niveau supérieur où find commence à filtrer.
  • L’attribut expression contrôle les tests qui recherchent dans la hiérarchie des répertoires pour produire une sortie.

Trouver un fichier sous Linux en utilisant le nom de fichier

Pour trouver un fichier en utilisant le nom de fichier, utilisez la syntaxe find -name filename. L’omission du chemin d’accès permet de rechercher le fichier sur l’ensemble du disque. Par exemple, vous pouvez trouver un fichier nommé example.err situé dans votre répertoire /home/username avec la commande suivante:

find -name example.err

Vous devriez voir une sortie similaire:

 ./username/example.err

Trouver un fichier dans votre répertoire actuel en utilisant la commande Find

Regardez la structure de répertoire et les fichiers d’exemple. Ils sont mentionnés tout au long des exemples de ce guide.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Si vous êtes dans directory_1 et que vous voulez trouver le fichier example.err dans le répertoire ou l’un de ses sous-répertoires, vous pouvez émettre la commande suivante :

find . -name example.err

Votre sortie ressemble à ce qui suit :

 ./example.err./directory_1/example.err

La sortie reflète la structure du répertoire directory_1 :

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Trouver des fichiers images sous Linux en utilisant la ligne de commande

Référant à la structure des fichiers dans la section précédente, il y a une image nommée image01.png qui est située à la racine (/)s de la structure du répertoire.

Pour trouver le fichier image01.png, exécutez la commande find suivante qui localise tous les fichiers .png stockés à l’intérieur du répertoire /.

find -name *.png

Vous devriez voir une sortie similaire :

 ./image01.png

Changez le type de fichier image et recherchez tout fichier .jpg à l’intérieur du répertoire racine (/) :

find -name *.jpg

La sortie ressemble à l’exemple. Reportez-vous à l’exemple de structure de répertoire dans la section précédente pour visualiser l’emplacement du fichier.

 ./web_files/unnamed.jpg

Recherche d’un fichier vide dans votre répertoire à l’aide de la ligne de commande

Pour trouver un fichier vide dans votre répertoire à l’aide de la ligne de commande, lancez la commande suivante:

find . -type f -empty

Si aucune sortie n’est renvoyée, alors il n’y a pas de fichier vide dans votre répertoire actuel.

Options et optimisations pour la recherche de fichiers sous Linux en utilisant la ligne de commande

La configuration par défaut de find ignore les liensymboliques. Si vous voulez que find suive et renvoie les liens symboliques, ajoutez l’option -L à la commande, comme indiqué ci-dessous :

find -O3 -L /var/www/ -name "*.html"

Cette commande active le niveau d’optimisation maximum (-O3) et permet à find de suivre les liens symboliques (-L). find recherche dans toute l’arborescence des répertoires sous /var/www/ les fichiers qui se terminent par .html.

find optimise sa stratégie de filtrage pour augmenter les performances. Trois niveaux d’optimisation sélectionnables par l’utilisateur sont spécifiés comme -O1, -O2 et -O3. L’optimisation -O1 est la valeur par défaut et force find à filtrer en fonction du nom de fichier avant d’exécuter tous les autres tests.

L’optimisation de niveau -O2 donne la priorité aux filtres de nom de fichier, comme dans -O1, puis exécute tous les filtrages de type de fichier avant de procéder à d’autres conditions plus gourmandes en ressources. L’optimisation de niveau -O3 permet à find d’effectuer l’optimisation la plus sévère et réordonne tous les tests en fonction de leur dépense relative et de la probabilité de leur succès.

Commande Description
-O1 Filtre basé sur le nom de fichier en premier (par défaut).
-O2 Nom de fichier d’abord, puis type de fichier.
-O3 Autoriser find à réordonner automatiquement la recherche en fonction de l’utilisation efficace des ressources et de la probabilité. de succès
-maxdepth X Recherche le répertoire actuel ainsi que tous les sous-répertoires de X niveaux de profondeur.
-iname Recherche sans tenir compte de la casse du texte.
-not Retourne uniquement les résultats qui ne correspondent pas au cas de test.
-type f Recherche de fichiers.
-type d Recherche de répertoires.

Recherche de fichiers sous Linux par heure de modification à l’aide de la ligne de commande

La commande find peut filtrer une hiérarchie de répertoires en fonction de la date de dernière modification d’un fichier. Par exemple, la commande suivante trouve tout fichier avec l’extension .err qui a été modifié au cours des 7 derniers jours :

find / -name "*err" -mtime -7

L’exemple de commande renvoie la sortie suivante :

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Utiliser Grep pour trouver des fichiers sous Linux en utilisant la ligne de commande

La commande find est uniquement capable de filtrer la hiérarchie des répertoires en fonction du nom et des métadonnées d’un fichier. Si vous avez besoin d’effectuer une recherche basée sur le contenu du fichier, utilisez un outil commegrep. Considérez l’exemple suivant :

find . -type f -exec grep "test" '{}' \; -print

Cette commande recherche chaque objet dans la hiérarchie de répertoires actuelle (.) qui est un fichier (-type f) et exécute ensuite la commande grep "test" pour chaque fichier qui satisfait aux conditions. Les fichiers qui correspondent sont imprimés à l’écran (-print). Les accolades ({}) sont un espace réservé pour les résultats de la recherche. Les {} sont entourés de guillemets simples (') pour éviter de remettre à grep un nom de fichier mal formé. La commande -exec se termine par un point-virgule (;), qui doit être échappé (\;) pour éviter toute interprétation par l’interpréteur de commandes.

Le fichier utilisé dans l’exemple (example.err) contient du texte à l’intérieur qui dit « test ». Lorsque vous exécutez la commande d’exemple, vous voyez une sortie similaire:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep a identifié chaque fichier dans le répertoire de travail actuel qui contient la chaîne « test ».

Note

Avant l’implémentation de l’option -exec par la commande find, vous pouviez générer une sortie similaire à l’exemple ci-dessus en utilisant la commande xargs:

find . -type f -print | xargs grep "test"

Traiter et trouver des fichiers en utilisant la commande Find sous Linux

L’option -exec exécute des commandes contre chaque objet qui correspond à l’expression find. Considérez l’exemple suivant :

find . -name "example.err" -exec chmod o+r '{}' \;

Ceci filtre chaque objet de la hiérarchie actuelle (.) pour les fichiers nommés rc.conf et exécute la commande chmod o+r pour modifier les autorisations de fichiers des résultats de la commande find.

La commande d’exemple exécute et exécute l’option -exec dans le répertoire racine du processus find. Utilisez -execdir pour exécuter la commande spécifiée dans le répertoire où réside la correspondance. Cela peut atténuer les problèmes de sécurité et produire de meilleures performances pour certaines opérations.

Les options -exec ou -execdir s’exécutent sans autre invite. Si vous préférez être invité avant d’agir, remplacez -exec par -ok ou -execdir par -okdir.

Comment trouver et supprimer des fichiers en utilisant la ligne de commande Linux

Attention

Utiliser cette option avec une extrême prudence.

Ajouter l’option -delete à la fin d’une expression de correspondance pour supprimer tous les fichiers qui correspondent. Utilisez cette option lorsque vous êtes certain que les résultats ne correspondent qu’aux fichiers que vous souhaitez supprimer.

Dans l’exemple ci-dessous, find localise récursivement tous les fichiers dans la hiérarchie en commençant par le répertoire actuel et supprime tous les fichiers qui se terminent par l’extension .err:

find . -name "*.err" -delete

Vous avez encore quelques questions ?

Rejoignez notre communauté et posez vos questions pour que d’autres passionnés de Linode et de Linux puissent vous aider.

Questions connexes :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.