Dans sa forme de base, find est facile. En même temps, il peut être complexe en raison du nombre d’options, de tests et d’actions disponibles.
La commande find est un outil incroyablement puissant, et il peut être gratifiant de s’efforcer de l’apprendre. Elle vous aidera à effectuer efficacement diverses tâches d’administration système, telles que la gestion de l’espace disque, les opérations récursives sur les fichiers et les sauvegardes.
La commande find de Linux recherche des fichiers et des dossiers en fonction des critères que vous définissez et vous permet d’effectuer une action sur les résultats de la recherche. La syntaxe de find est la suivante :
$ find répertoire-à-rechercher critères action
où
- le répertoire à rechercher est le point de départ à partir duquel find commence à rechercher des fichiers. La recherche porte sur tous les sous-répertoires de ce répertoire.
- critères (test) indique les fichiers à rechercher
- action indique ce qu’il faut faire avec chaque fichier trouvé correspondant aux critères.
Tests
Recherche par nom
Voici un exemple simple. La commande suivante recherche le fichier a.txt dans le répertoire actuel :
$ find . -nom "a.txt"
./a.txt
Où
- . fait référence au répertoire actuel
- -nom test spécifie les critères à prendre en compte
Cette recherche avec -name test est sensible à la casse et ignore le fichier A.txt. Pour vous assurer que votre recherche ne tient pas compte des majuscules, utilisez -iname
test :
$ find . -iname "a.txt"
./a.txt
./A.txt
Pour rechercher tous les fichiers d’images .jpg
dans le répertoire actuel, utilisez le motif de remplacement *.jpg
:
$ find . -name "*.jpg"
./genxfacebook2.jpg
./genxfacebook1.jpg
./Moodle2.jpg
./moodle.jpg
./moodle/moodle1.jpg
./genxfacebook.jpg
Vous pouvez utiliser le nom du répertoire dans lequel la recherche doit être effectuée. Par exemple, pour rechercher toutes les images .jpg dans le répertoire /home :
$ find /home -name "*.jpg"
find : `/home/ubuntu/.ssh' : Permission refusée
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find : `/home/me/testfiles' : Permission refusée
find : `/home/me/data' : Permission refusée
/home/me/water.jpg
find : `/home/me/.cache' : Permission refusée
Si vous voyez trop d’erreurs de permissions refusées, vous pouvez ajouter 2>/dev/null à la fin de la commande. Cela redirige les messages d’erreur vers le périphérique /dev/null, et donne une sortie plus propre :
find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
/home/me/water.jpg
Recherche par type de fichier
Le test -type
vous permet de rechercher des fichiers par type. Les types de fichiers peuvent être :
f fichiers ordinaires
d répertoires
l liens symboliques
b périphériques de blocs
c dispositifs à caractères
p tuyaux nommés
s sockets
Par exemple, en utilisant le test -type d, vous n’obtiendrez que la liste des répertoires :
$ find . -type d
.
./.ssh
./.cache
./moodle
Recherche par taille de fichier
Vous pouvez être amené à rechercher des fichiers volumineux et à les supprimer. Dans l’exemple suivant, le test -size est suivi de la chaîne 1G. Cela permet de rechercher tous les fichiers dont la taille est supérieure à 1 Go.
$ find . -size 1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg
Le signe signifie qu’il faut rechercher des fichiers plus grands que le nombre suivant. Le symbole moins (-) peut être utilisé pour indiquer plus petit que. L’absence de signe signifie que la taille est exactement la même.
Le nombre est suivi de l’unité de taille du fichier. Les unités peuvent être :
Caractère | Unité de taille fine |
b | 521 blocs bye |
c | Octets |
k | Kilo-octets |
M | Mégaoctets |
G | Gigaoctet |
Recherche de répertoires et de fichiers vides
Utilisez le test -empty
pour trouver les répertoires et fichiers vides comme ceci :
$ find . -vide
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed
Recherche par heure de modification du fichier
Vous pouvez rechercher tous les fichiers et répertoires en fonction de l’heure de création ou de modification avec -cmin
test. Pour rechercher tous les fichiers modifiés au cours des 60 dernières minutes (moins de 60), utilisez -60
comme suit :
$ find . -cmin -60
.
./a.txt
./datafiles
Pour les fichiers modifiés avant les 60 dernières minutes, utilisez 60
.
Recherche par heure d’accès
Vous pouvez rechercher des fichiers en fonction de leur dernière heure d’accès, avec la commande -atime
test. Par exemple, la commande suivante recherche les fichiers qui n’ont pas été consultés au cours des 180 derniers jours :
$ find . -atime 180
Ces fichiers peuvent être déplacés vers un périphérique de sauvegarde si vous manquez d’espace disque.
Recherche par nom d’utilisateur
Avec le test -user nom d’utilisateur, vous pouvez rechercher tous les fichiers et répertoires appartenant à un utilisateur. Par exemple, la commande suivante recherche tous les fichiers et répertoires appartenant à l’utilisateur ubuntu dans le répertoire /home :
$ find /home -user ubuntu 2>/dev/null
/home/ubuntu
/home/ubuntu/.bash_logout
/home/ubuntu/.bashrc
/home/ubuntu/.ssh
/home/ubuntu/.profile
Recherche par mode
Vous souhaitez rechercher des fichiers définis dans un mode spécifique, c’est-à-dire disposant d’un ensemble spécifique de permissions ? Utilisez -perm test. L’exemple suivant recherche les fichiers dont les autorisations sont définies sur 777 :
$ find /home -perm 777
Opérateurs
Vous pouvez utiliser les trois opérateurs logiques suivants pour combiner plusieurs tests dans une seule commande find :
- -et
- -ou
- -pas
Par exemple, la commande suivante recherche les fichiers de plus de 100 Mo appartenant à l’utilisateur me :
$ find /home -user me -and -size 100M 2>/dev/null
/home/me/kali-linux-2020.3-installer-netinst-i386.iso
La commande suivante recherche les fichiers de plus de 100 Mo appartenant à l’utilisateur me ou à l’utilisateur vagrant :
$ find /home \( -user vagrant -ou -user me \) -and -size 100M 2>/dev/null
/home/vagrant/LibreOffice_7.0.1_Linux_x86-64_deb.tar.gz
/home/me/kali-linux-2020.3-installer-netinst-i386.iso
Vous devez placer une barre oblique inverse devant les parenthèses afin d’empêcher le shell d’essayer de les interpréter.
Actions
find vous donne les résultats de la recherche, puis le choix d’effectuer une action sur ces résultats. Voici quelques actions prédéfinies :
Action | Description de l’action |
-supprimer | Supprime les fichiers qui correspondent aux critères de recherche |
-ls | Affiche une sortie ls détaillée avec la taille des fichiers et le nombre d’inodes |
Affiche le chemin d’accès complet des fichiers correspondants. C’est l’action par défaut si aucune autre action n’est spécifiée | |
-exec | Exécute la commande suivante, sur chaque ligne du résultat de la recherche |
Ainsi, si vous souhaitez rechercher tous les fichiers vides et les supprimer, voici comment procéder :
$ find . -empty -delete
Attention : Avant d’utiliser l’action delete, il est toujours prudent d’exécuter la commande une fois avec l’action -print
et de confirmer les résultats.
L’action -exec
est spéciale. Elle vous permet d’exécuter une commande de votre choix sur les résultats de la recherche. Elle se présente comme suit
-exec <em>command</em> {} \ ;
Ici
- commande est la commande que vous souhaitez exécuter sur les résultats de la recherche, comme rm, mv ou cp.
- {} représente les résultats de la recherche.
- La commande se termine par un point-virgule échappé par une barre oblique inverse.
Ainsi, la commande permettant de rechercher et de supprimer tous les fichiers vides peut s’écrire comme suit :
$ find . -empty -exec rm {} \ ;
Voici un autre exemple utilisant l’action -exec
. La commande suivante copie tous les fichiers d’image .png
dans le répertoire backup/images :
$ find . -name "*.png" -exec cp {} /backups/images \N -exec cp {}
Conclusion
Vous pouvez utiliser la commande find de Linux pour rechercher des fichiers en fonction de leur nom, de la date du dernier accès, de la date de la dernière modification, du nom de l’utilisateur (propriétaire), du nom du groupe, de la taille, des autorisations et de divers autres critères. Les résultats de la recherche vous permettent d’effectuer des actions telles que la suppression, la copie ou le déplacement des fichiers vers un autre emplacement.
Une fois que vous maîtrisez la commande find, elle peut vous être d’une grande aide et vous simplifier les tâches d’administration du système. La clé pour la maîtriser est de la pratiquer et de l’utiliser !