Dans sa forme de base, la recherche est facile. En même temps, cela peut être complexe avec le nombre d'options, de tests et d'actions disponibles.
La commande find est un outil incroyablement puissant, et faire des efforts pour l'apprendre peut être gratifiant. Il vous aidera à effectuer efficacement diverses tâches d'administration système, telles que la gestion de l'espace disque, les opérations de fichiers récursives et les sauvegardes.
La commande de recherche de Linux recherche les fichiers et les 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 comme ceci:
$ find directory-to-search criteria action
De
- Le répertoire vers la recherche est le point de départ à partir duquel find commence la recherche de fichiers. La recherche inclut tous les sous-répertoires de ce répertoire.
- critère (test) indique les fichiers à rechercher
- l'action indique quoi faire avec chaque fichier trouvé correspondant aux critères.
Tests
Rechercher par nom
Voici un exemple simple. La commande suivante recherche le fichier a.txt dans le répertoire courant:
$ find . -name "a.txt"
./a.txt
Où
- . fait référence au répertoire courant
- -name test spécifie les critères à respecter
Cette recherche avec -name test est sensible à la casse et ignore le fichier A.txt. Pour vous assurer que votre recherche est insensible à la casse -iname
tester:
$ find . -iname "a.txt"
./a.txt
./A.txt
Pour rechercher tout .jpg
fichiers image dans le répertoire actuel, utilisez le modèle générique *.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 effectuer la recherche. Par exemple, pour rechercher toutes les images .jpg dans le répertoire / home:
$ find /home -name "*.jpg"
find: `/home/ubuntu/.ssh': Permission denied
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find: `/home/me/testfiles': Permission denied
find: `/home/me/data': Permission denied
/home/me/water.jpg
find: `/home/me/.cache': Permission denied
Si vous voyez trop d'erreurs d'autorisations 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 claire:
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 -type
test, vous pouvez rechercher des fichiers par type. Les types de fichiers peuvent être:
f plain files
d directories
l symbolic links
b block devices
c character devices
p named pipes
s sockets
Par exemple, l'utilisation du test -type d ne listera que les répertoires:
$ find . -type d
.
./.ssh
./.cache
./moodle
Recherche par taille de fichier
Vous devrez peut-être rechercher des fichiers volumineux et les supprimer. Dans l'exemple suivant, le test -size est suivi de la chaîne + 1G. Cela rechercherait tous les fichiers de plus de 1 Go.
$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg
Le signe + signifie que les fichiers de recherche sont plus grands que le nombre suivant. Un symbole moins (-) peut être utilisé pour indiquer une valeur inférieure à. Ne pas utiliser de signe signifierait correspondre exactement à la taille.
Le numéro est suivi de l'unité de taille de fichier. Les unités peuvent être:
Personnage | Unité de taille fine |
b | 521 blocs bye |
c | Octets |
k | Kilobytes |
M | Mégaoctets |
G | gigaoctets |
Rechercher des répertoires et des fichiers vides
Utilisez -empty
testez pour trouver des répertoires vides et des fichiers comme celui-ci:
$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed
Recherche par heure de modification de fichier
Vous pouvez rechercher tous les fichiers et répertoires en fonction de l'heure de création ou de modification avec -cmin
tester. Pour rechercher tous les fichiers modifiés au cours des 60 dernières minutes (moins de 60), utilisez -60
comme ça:
$ find . -cmin -60
.
./a.txt
./datafiles
Pour les fichiers modifiés à tout moment avant les 60 dernières minutes, utilisez +60
.
Recherche par temps d'accès
Vous pouvez rechercher des fichiers par heure du dernier accès, avec -atime
tester. Par exemple, la commande suivante recherche les fichiers non consultés au cours des 180 derniers jours:
$ find . -atime +180
Ceux-ci peuvent être déplacés vers un périphérique de sauvegarde si l'espace disque est insuffisant.
Rechercher par nom d'utilisateur
Avec -user Nom d'utilisateur test, 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 disposer d'un ensemble d'autorisations spécifique? Utilisez -perm test. L'exemple suivant recherche les fichiers avec des autorisations définies sur 777:
$ find /home -perm 777
Operators
Vous pouvez utiliser les trois opérateurs logiques suivants pour combiner plusieurs tests dans une seule commande de recherche:
- -et
- Ou
- -ne pas
Par exemple, la commande suivante recherche les fichiers de plus de 100 Mo appartenant à l'utilisateur moi:
$ 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 moi ou à l'utilisateur vagrant:
$ find /home \( -user vagrant -or -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 eux. Voici quelques actions prédéfinies:
Action | Description |
-effacer | 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 |
-impression | Affiche le chemin 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 qui suit, sur chaque ligne de la sortie de recherche |
Donc, si vous souhaitez rechercher tous les fichiers vides et les supprimer, voici comment vous pouvez le faire:
$ find . -empty -delete
Attention: avant d'utiliser l'action de suppression, il est toujours prudent d'exécuter la commande une fois avec -print
action et confirmez les résultats.
La solution -exec
l'action est spéciale. Il vous permet d'exécuter une commande de votre choix sur les résultats de la recherche. C'est comme ça:
-exec <em>command</em> {} \;
Ici
- commander 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 pour rechercher et supprimer tous les fichiers vides peut être écrite comme ceci:
$ find . -empty -exec rm {} \;
Voici un autre exemple utilisant -exec
action. La commande suivante copie tout .png
fichiers image dans le répertoire backup / images:
$ find . -name "*.png" -exec cp {} /backups/images \;
Conclusion
Vous pouvez utiliser le Commande Linux find pour rechercher des fichiers en fonction du 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. Avec ces résultats de recherche, vous pouvez effectuer des actions sur eux, comme les supprimer, les copier ou les déplacer vers un autre emplacement.
Une fois que vous maîtrisez la commande find, elle peut être d'une grande aide et peut simplifier l'administration du système tâches pour vous. Et la clé pour le maîtriser est de le pratiquer et de l'utiliser!