allNix — Astuces, tuto, docs sur Linux et autres

Trouver des fichiers avec find

Find est un outil en ligne de commande qui permet de rechercher des fichiers en fonction de critères et de traiter les résultats.

Syntaxe de base

Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path…] [expression]

Soit de manière plus claire plus la commande la plus simple :

find [chemin]

Rechercher des fichiers dans un répertoire

La façon la plus directe d’utiliser la commande find est d’indiquer un répertoire dans lequel chercher des fichiers :

$ find upload
[...]
upload/075
upload/075/213
upload/240
upload/240/002
upload/072
upload/072/156
upload/072/230
upload/043
[...]

Afficher que les fichiers

Dans l’exemple précédent, la commande affiche tous les répertoires et les fichiers.
Pour filtrer par type de fichier, type au sens unix du terme (fichier, répertoire, socket, lien symbolique, …), il faut utiliser le paramètre -type suivi du type que l’on veut filtrer.

$ find -type f
$ find -type d

Voir le manuel pour les détails des différents types.

Pour revenir à notre exemple précédent, on n’affiche que les fichiers :

$ find upload -type file
upload/167/219/e60a2fd3-9a0c-4279-8350-943b30aa5a84.mp4
upload/048/096/6e2fc308-4705-4388-a5ad-4a2a870670ba.jpg
upload/174/033/3ac4ef76-ce87-43d6-8bd0-6e46f1fde55e.mp4
upload/189/087/2f9f6ae8-ff6d-456c-b61b-9472c2b8df03.mp4
upload/152/188/1c969daa-1c20-471e-b9a0-2f3845b88d9b.mp4
upload/020/096/b23cea3e-3529-4d3b-9196-886468be9767.mp4
upload/068/154/f4b472c3-2d27-43ef-b92a-6a71b294a236.mp4
upload/237/121/68c70812-4a3a-49da-a245-9475b0a3ae8b.mp4
upload/114/063/911c1e21-f9cf-495a-8a53-473780fd3c58.jpg

Exécuter une commande sur les fichiers trouvés

Le paramètres -exec permet d’exécuter une commande sur un fichier trouvé.
Les accolades {} sont remplacées par le nom du fichier trouvé et le point virgule \; délimite la fin de la commande à executer sur le fichier.

Par exemple la commande suivante permet d’afficher la taille des fichiers trouvés :

$ find upload/ -type file -exec du -sh {} \;
3,5M upload/123/190/a94c216c-81dd-454b-9b59-c9011df45e1f.mp4
16K upload/177/019/dce87cf8-4dd2-4421-b3a9-239940d006dc.jpg
436K upload/177/200/9606bef2-3353-45fc-ad18-97cb3a9b7a23.m4a
1,0M upload/183/073/SampleVideo_1280x720_1mb.mp4
31M upload/183/057/SampleVideo_1280x720_30mb.mp4
3,5M upload/148/042/051624a8-0866-42f4-812f-f58b701baa46.m4a
748K upload/141/255/9b8773dd-28d6-4291-a723-4e3069efd2fa.mp3