La commande Linux find est un outil puissant qui permet aux administrateurs système de localiser et de gérer des fichiers et des répertoires en fonction d’un large éventail de critères de recherche. Il peut trouver des répertoires et des fichiers par leur nom, leur type ou leur extension, leur taille, leurs autorisations, etc.
Outre la localisation de fichiers et de répertoires, la combinaison de la commande find avec d’autres vous permet d’agir sur les résultats. L’ajout de l’option -exec permet aux administrateurs système d’exécuter des commandes externes et d’effectuer des actions telles que copier, déplacer, supprimer ou modifier les autorisations des fichiers correspondant aux critères spécifiés tels que la taille, le nom, etc.
Dans cet article, nous commencerons par expliquer les commandes de recherche de base de Linux avec des exemples. Cela vous montrera comment trouver des fichiers et des répertoires. Nous vous montrerons ensuite comment utiliser l’option -exec pour agir sur les fichiers ou répertoires en fonction de leur taille, des permissions, etc.
La syntaxe générale de la commande find est
find {path} {name -of-file or dir-to-search} {action-to-take}
Où,
- path spécifie le répertoire.
- name-of file or dir-to-search : nom du fichier ou du répertoire à rechercher
- action à entreprendre : telle que copier, supprimer, déplacer, etc.
Dans ce didacticiel, nous expliquerons comment localiser les fichiers et les répertoires correspondant aux modèles spécifiés. Nous verrons également comment effectuer des actions sur les fichiers ou répertoires que la commande find localise. Le guide est basé sur Ubuntu mais s’applique à la plupart des distributions et versions Linux.
Table des matières
Rechercher des fichiers et des répertoires
Rechercher des fichiers spécifiques par nom ou extension
Pour rechercher un fichier spécifique, exécutez la commande suivante à partir de la racine (/). La commande contient le nom exact du fichier que vous recherchez.
find . -name file22.txt
Production
./test/file22.txt ./sales/file22.txt
Veuillez noter que les résultats incluent le chemin. Ceci est important si vous ne connaissez pas le répertoire où se trouve le fichier ou s’il se trouve à plusieurs endroits.
Vous pouvez également rechercher le fichier dans un autre répertoire tout en restant à l’emplacement actuel. Dans ce cas, vous devez fournir le chemin du répertoire dans lequel vous souhaitez effectuer la recherche.
find ./test -name file22.txt
Recherche de fichiers spécifiques dans un autre répertoire
Dans notre cas, nous chercherons tous ceux commençant par le fichier lettres dans le répertoire test.
find ./test -name file*
Production
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Rechercher des fichiers par extension
Pour trouver un fichier sous Linux avec une certaine extension, ajoutez-le à la commande.
find . -name *.txt
Production
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Rechercher des fichiers et des répertoires par nom
Utilisez la commande ci-dessous pour rechercher des fichiers et des répertoires commençant par les lettres qa. Dans notre ordinateur, nous avons les fichiers qatree.txt et qa.txt ainsi qu’un répertoire nommé qa.
Si nous exécutons la commande;
find ./ -name "qa*"
Il renvoie la sortie suivante
./test/qatree.pdf ./test/qa.txt ./home/qa
La commande renvoie à la fois les fichiers et les répertoires correspondant aux critères de recherche. Pour rechercher uniquement des fichiers ou des répertoires, vous devez le spécifier dans la commande.
Rechercher uniquement des fichiers ou des répertoires
Pour les fichiers uniquement, utilisez le commutateur de type f.
Fichiers uniquement
find ./ -type f -name "qa*"
Production
./test/qatree.pdf ./test/qa.txt
Annuaires uniquement
Ajoutez l’option de type d pour localiser uniquement les répertoires.
find ./ -type d -name "qa*"
Production
./home/qa
Commande de recherche insensible à la casse
Toutes les recherches avec le commutateur -name sont sensibles à la casse et ne donneront pas de résultats en majuscules. Pour obtenir tous les cas, utilisez l’option -iname.
find ./ -iname "qa*"
Production
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Rechercher un fichier dans plusieurs répertoires
Pour trouver les fichiers dans différents répertoires, ajoutez leurs chemins dans la commande. Dans notre cas, nous vérifierons dans les répertoires test et numérique.
find ./test ./numeric -name file22.txt -type f
Production
./test/file22.txt /root/numeric/file22.txt
Trouver plusieurs fichiers avec différentes extensions de tous les répertoires
Vous pouvez utiliser la commande find pour localiser plusieurs fichiers qui partagent les différentes extensions telles que *.doc, *.txt *.pdf, etc. Cela peut être fait séparément, une extension à la fois, ou en utilisant une seule commande qui inclut toutes les extensions souhaitées.
trouver . -type f ( -nom « *.txt » -o -nom « *.pdf » -o -nom « *.doc » )
production
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Rechercher des fichiers contenant un certain texte
Parfois, vous souhaitez accéder à un fichier contenant un certain texte mais ne pouvez pas vous rappeler son nom de fichier ou son emplacement. Cette commande vous permet de retrouver tous les fichiers contenant votre texte cible.
Pour rechercher tous les fichiers contenant le mot hyperconvergence », utilisez ;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Production
/root/numeric/hci /root/HCIP
L’option –i permet à la commande d’ignorer les majuscules et trouvera le texte, qu’il soit en majuscule ou non, c’est-à-dire hyperconvergence, Hyperconvergence , etc.
Pour rechercher les fichiers dans un répertoire spécifique, ajoutez-les simplement à la commande
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Production
./numeric/hci
Explorez d’autres exemples de commandes grep.
Rechercher des fichiers et des répertoires en fonction de leur taille
Vous pouvez trouver tous les fichiers ou répertoires qui sont plus petits, égaux ou supérieurs à une certaine taille, dans une certaine plage ou vides. Utilisez le format de taille approprié en fonction du type de fichiers ou de répertoires que vous recherchez.
Les options de taille incluent ;
c – octets
k – kilo-octets
M – Mégaoctets
G – Gigaoctets
Trouver des fichiers d’une certaine taille – égale à 30 Mo
Pour rechercher, trouvez tous les fichiers de 30 Mo
find / -size 30M
Rechercher des fichiers plus grands qu’une taille spécifiée
find -size +2M
Production
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Rechercher des fichiers de moins de 10 Mo dans le répertoire actuel
find . -type f -size -10M
Rechercher des fichiers dont la taille est comprise entre 100 et 200 Mo
Lors de la recherche de fichiers dans une plage spécifique, par exemple entre 100 et 200 Mo
find / -size +100M -size -200M
Rechercher des répertoires de plus de 20 Ko
trouver / -type d -taille +20k
Trouvez des fichiers et des répertoires vides.
Des dossiers
trouver ./ -type f -taille 0
ou
find ./ -type f –empty
Annuaires
find ./ -type d –empty
Rechercher des fichiers par âge ou heure de modification
Rechercher des fichiers de plus de n jours
find /path/ -type f -name '*.txt' -mtime +8
Le -mtime +8 recherchera les fichiers txt datant de plus de 8 jours.
Par date de modification
Cela recherchera les fichiers modifiés au cours des 17 dernières heures
find . -mtime -17 -type f
Recherche les répertoires modifiés au cours des 10 derniers jours
find . -mtime -10 -type d
Rechercher des fichiers en fonction de l’accès ou de la modification
Rechercher des fichiers en fonction de la date ou de l’heure d’accès. Cela vous permet de voir les fichiers qui ont été ou n’ont pas été consultés au cours d’une période spécifiée.
Pour voir les fichiers qui n’ont pas été consultés au cours des 10 derniers jours dans le répertoire personnel.
find /home -atime +10
Fichiers consultés il y a exactement 10 jours
find /home -atime 10
Consulté au cours des 10 derniers jours
find /home -atime -10
Rechercher les fichiers modifiés au cours des n derniers jours
Vous pouvez également rechercher les fichiers dans le répertoire /home modifiés au cours des 10 derniers jours à l’aide de la commande ;
find /home -mtime -10
Trouvez les fichiers modifiés dans une période spécifique.
Par exemple, tous les fichiers modifiés il y a entre 6 et 15 jours dans le répertoire home.
find /home -type f -mtime +6 -mtime -15
Fichiers et répertoires consultés au cours des 10 dernières minutes
Pour trouver les fichiers consultés au cours des 10 dernières minutes, utilisez l’option -amin.
find . -amin -10 -type f
Production
./.bash_history ./[email protected]:~#
Répertoires consultés au cours des 10 dernières minutes
find . -amin -10 -type d
Rechercher des fichiers correspondant à des autorisations spécifiques
Syntaxe
$ find -perm mode
Où mode est l’autorisation qui est soit numérique comme 644, 655, 700, 777, etc., soit en lettres comme u=x, a=r+x, etc.
Vous pouvez spécifier le mode des trois manières suivantes.
Rechercher des fichiers avec la permission 777
find -perm 777
Production
./file1
Trouver des fichiers avec au moins 766
trouver -perm -766
Production
./file2 ./file1
La commande recherche tous les fichiers dans lesquels le
- Le propriétaire du fichier dispose des autorisations de lecture/écriture/exécution.
- Le groupe a des autorisations de lecture/écriture
- D’autres ont l’autorisation de lecture/écriture
En tant que tel, il renvoie deux fichiers qui répondent à ce critère – fichier1 et fichier2. Les fichiers n’ont pas besoin d’avoir les autorisations 766 exactes et peuvent en avoir d’autres aussi longues mais doivent avoir au moins les autorisations spécifiées.
Trouver des fichiers accessibles en écriture par le propriétaire
Nous allons maintenant utiliser le « / » pour rechercher des fichiers accessibles en écriture soit par leur propriétaire, soit par un groupe, soit par d’autres.
find -perm /222 . ./file2 ./file3 ./file1
Ce qui précède recherche les fichiers accessibles en écriture par leur propriétaire ou leur groupe.
Cela renvoie des fichiers accessibles en écriture par l’un ou l’autre, mais pas nécessairement par les deux. Pour voir les fichiers, où les deux ont des autorisations en écriture, utilisez le préfixe -.
find -perm -220
Production
./file2 ./file1
Rechercher des fichiers appartenant à un utilisateur
Trouver tous les fichiers appartenant à Jack
find /home -user jack
Production
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Rechercher des fichiers spécifiques appartenant à un utilisateur
Trouver tous les fichiers texte appartenant à Jack
find /home -user jack -iname "*.txt"
Production
/home/jack/docs/file32.txt
Rechercher et répertorier les fichiers et répertoires avec leurs autorisations
find -name "*.conf" | ls -l
Production
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Trouvez et agissez sur les résultats
Dans cette section, nous verrons comment vous pouvez agir sur les fichiers qui correspondent au modèle spécifié dans la commande find.
Rechercher des fichiers et modifier les autorisations
Recherchez et modifiez les autorisations de certains types de fichiers. Dans notre cas, nous travaillerons avec des fichiers PHP avec différentes autorisations, comme indiqué ci-dessous.
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Nous allons maintenant rechercher tous les fichiers PHP (ci-dessus) et remplacer leurs permissions par 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
La commande recherche les fichiers PHP dans le répertoire ver, puis définit leur autorisation sur 755 (rwxr-xr-x)
Résultats
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Rechercher et modifier les autorisations de fichiers et de répertoires
Trouvez des fichiers avec 644 autorisations et modifiez-les pour avoir 655 autorisations
find . -type f -perm 644 -exec chmod 655 {} ;
Vous pouvez également rechercher des répertoires avec 644 autorisations et les remplacer par 755.
find . -type d -perm 644
Production
./docs
Le dossier docs a 644 autorisations
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Pour le mettre à 755, nous exécutons
find . -type d -perm 644 -exec chmod 755 {} ;
Maintenant, nous pouvons vérifier à nouveau pour voir exactement ce que 755
find . -type d -perm 755
Production
.
./docs
D’en haut, nous pouvons voir que les répertoires root et docs ont les 755 autorisations.
La commande Ls –la donne les détails suivants
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Rechercher et copier des fichiers ou des répertoires
Rechercher et copier un fichier spécifique dans un répertoire
La commande ci-dessous trouvera le fichier file22.txt et le copiera dans le répertoire ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Rechercher et copier un type de fichiers dans un répertoire
Pour rechercher des fichiers tels que des images avec l’extension jpg dans le répertoire actuel et les copier dans un emplacement différent, comme un dossier d’images, utilisez ;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Cela trouvera et copiera tous les fichiers jpg dans le dossier ~/tmp/images.
Trouver et copier un fichier dans plusieurs répertoires
Trouvez et copiez un seul vers plusieurs répertoires.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Cela trouvera le fichier hci et le copiera dans les trois répertoires de /tmp/dir1/ /tmp/dir2/ et $HOME/3/
Rechercher et déplacer des fichiers vers un autre répertoire
Pour déplacer un fichier connu d’un répertoire à un autre. Pour déplacer le fichier universal.php ;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Rechercher et déplacer des fichiers avec une certaine extension vers un autre dossier
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Trouver certains fichiers et déplacer vers un autre dossier spécifique
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
La commande recherche tous les fichiers avec des noms commençant par uni et ayant n’importe quelle extension. Il les déplace ensuite dans le répertoire /unifiles/
Rechercher et déplacer des fichiers en fonction de leur ancienneté
Recherchez et déplacez les fichiers plus anciens que les jours spécifiés vers un emplacement différent, tel que l’archive.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Cela recherchera les fichiers pdf de plus de 20 jours et les déplacera vers le répertoire backup1.
Rechercher et supprimer des fichiers et des répertoires
La syntaxe pour rechercher et supprimer des fichiers ou des répertoires dans le répertoire courant est
trouver . -type f -name « fichier à supprimer » -exec rm -f {} ; pour supprimer uniquement les fichiers ou
trouver . -type d -name « répertoire à supprimer » -exec rm -rf {} ; pour supprimer uniquement les répertoires
Rechercher et supprimer uniquement des fichiers spécifiques
Pour rechercher et supprimer des fichiers commençant par til, utilisez ;
find . -type f -name "til*" -exec rm {} ;
Pour rechercher et supprimer des répertoires commençant par til
find . -type d -name "til*" -exec rm {} ;
Supprimer les fichiers et les répertoires
find . -name "til*" -exec rm -rf {} ;
Cela supprimera à la fois les fichiers et les répertoires commençant par les lettres til.
Supprimer par extension
Vous trouverez ci-dessous comment localiser et supprimer tous les fichiers txt du répertoire actuel. Remplacez le txt par une autre extension telle que bak, pdf ou toute autre que vous souhaitez supprimer.
find . -type f -name "*.txt" -exec rm -f {} ;
Si vous souhaitez que le système vous demande de confirmer avant de supprimer chaque fichier, ajoutez l’option -i comme ci-dessous.
find . -type f -name "*.txt" -exec rm -i {} ;
Production
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Par défaut, le -rm ne supprimera pas les répertoires et vous devez utiliser l’option –r pour assurer une suppression récursive. Cela garantit la suppression des répertoires vides et ceux contenant des fichiers. L’option -f force la suppression et est utilisée à la fois pour les fichiers et les répertoires.
Rechercher et supprimer des fichiers de plus de n jours
Recherchez et supprimez les fichiers de sauvegarde de plus de 20 jours du répertoire actuel.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Cela supprimera tous les fichiers .bak de plus de 20 jours.
Rechercher et supprimer des répertoires uniquement
Pour supprimer un répertoire appelé dir22
find . -type d -name dir22 -exec rm -rf {} ;
Assurez-vous de respecter la casse du nom de répertoire ou utilisez l’option -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Supprime à la fois Dir22 et dir22
Pour confirmer avant la suppression, utilisez l’option -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Production
rm : supprimer le répertoire ‘./Dir22’ ? n
rm : supprimer le répertoire ‘./dir22’ ? y
Dans notre cas, nous avons tapé n pour le répertoire Dir22 qui ne sera pas supprimé et y pour le dir22 qui sera désormais supprimé.
Rechercher et supprimer des fichiers vides
Vous pouvez utiliser l’une des commandes suivantes pour localiser les fichiers vides et les supprimer automatiquement.
find ./ -type f -size 0 -exec rm -f {} ;
ou
trouver ./ -type f -taille 0 | xargs rm-f
ou
trouver ./ -type f -taille 0 –supprimer
Rechercher et supprimer des répertoires vides
Pour supprimer les répertoires vides, nous utiliserons l’option d.
find ./ -type d -empty -exec rmdir {} ;
Une autre alternative consiste à utiliser delete au lieu de remove.
find ./ -type d -empty -delete
Veuillez noter que la suppression de fichiers système ou critiques de votre ordinateur peut endommager le système d’exploitation ou les applications ou entraîner la perte de vos données importantes.
Pour éviter les suppressions accidentelles, il est recommandé d’utiliser un compte utilisateur non root. Assurez-vous également que vous supprimez les bons fichiers qui ne sont pas utiles et que vous disposez d’une sauvegarde de tous vos fichiers de données au cas où.
Et après?
Allez-y et essayez les commandes de recherche Linux ci-dessus dans votre environnement de laboratoire ou de NON PRODUCTION. Voyez si vous pouvez en utiliser pour automatiser le nettoyage du système de fichiers avec Crontab. Et, pour maîtriser Linux, consultez ceci Cours en ligne.