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
- Commandes de recherche Linux communes et syntaxe
- Trouver un fichier sous Linux en utilisant le nom de fichier
- Trouver un fichier dans votre répertoire actuel en utilisant la commande Find
- Trouver des fichiers images sous Linux en utilisant la ligne de commande
- Recherche d’un fichier vide dans votre répertoire à l’aide de la ligne de commande
- Options et optimisations pour la recherche de fichiers sous Linux en utilisant la ligne de commande
- Recherche de fichiers sous Linux par heure de modification à l’aide de la ligne de commande
- Utiliser Grep pour trouver des fichiers sous Linux en utilisant la ligne de commande
- Traiter et trouver des fichiers en utilisant la commande Find sous Linux
- Comment trouver et supprimer des fichiers en utilisant la ligne de commande Linux
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 processusfind
. - 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 commandefind
, vous pouviez générer une sortie similaire à l’exemple ci-dessus en utilisant la commandexargs
: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 :