Le Linux find
command 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 des find
La commande avec d'autres vous permet d'agir sur les résultats. Ajout du -exec
L'option permet aux administrateurs système d'exécuter des commandes externes et d'effectuer des actions telles que la copie, le déplacement, la suppression ou la modification des 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 répertoires. Nous vous montrerons ensuite comment utiliser le -exec
option pour agir sur les fichiers ou répertoires en fonction de leur taille, autorisations, 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 à rechercheraction-to-take
: comme copier, supprimer, déplacer, etc.
Dans ce didacticiel, nous expliquerons comment localiser les fichiers et 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 de Linux.
Rechercher des fichiers et des répertoires
Find specific files by name or 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
Sortie
./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
Looking for specific files in another directory
Dans notre cas, nous chercherons tous ceux commençant par les lettres filet dans le répertoire de test.
find ./test -name file*
Sortie
./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc
Search for files by extension
Pour trouver un fichier sous Linux avec une certaine extension, ajoutez-le à la commande.
find . -name *.txt
Sortie
./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt
Find files and directories by name
Utilisez la commande ci-dessous pour rechercher des fichiers et des répertoires commençant par les lettres qa
. Dans notre ordinateur, nous avons le qatree.txt
et qa.txt
fichiers ainsi qu'un répertoire du nom 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.
Find files or directories only
Pour les fichiers uniquement, utilisez le type f
interrupteur.
Fichiers uniquement
find ./ -type f -name "qa*"
Sortie
./test/qatree.pdf
./test/qa.txt
Répertoires uniquement
Ajouter l' type d
option pour localiser uniquement les répertoires.
find ./ -type d -name "qa*"
Sortie
./home/qa
Case insensitive find command
Toutes les recherches avec -name
switch sont sensibles à la casse et ne donnera pas de résultats avec des majuscules. Pour obtenir tous les cas, utilisez le -iname
option.
find ./ -iname "qa*"
Sortie
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa
Search for a file from multiple directories
Pour trouver les fichiers dans différents répertoires, ajoutez leurs chemins dans la commande. Dans notre cas, nous enregistrerons le test
et numeric
répertoires.
find ./test ./numeric -name file22.txt -type f
Sortie
./test/file22.txt
/root/numeric/file22.txt
Find multiple files with different extensions from all directories
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.
find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
sortie
./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
Find files containing certain text
Parfois, vous souhaitez accéder à un fichier contenant du texte mais ne pouvez pas rappeler son nom de fichier ou son emplacement. Cette commande vous permet de trouver 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" {} ;
Sortie
/root/numeric/hci
/root/HCIP
La –i
L'option permet à la commande d'ignorer les cas et trouvera le texte en majuscules 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" {} ;
Sortie
./numeric/hci
Explorez davantage 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
Find files of a certain size – equal to 30MB
Pour rechercher trouver tous les fichiers 30 Mo
find / -size 30M
Find files larger than a specified size
find -size +2M
Sortie
. /Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Find files less than 10MB in the current directory
find . -type f -size -10M
Find files with sizes between 100-200MB
Lorsque vous recherchez des fichiers dans une plage spécifique, par exemple entre 100 et 200 Mo
find / -size +100M -size -200M
Look for directories larger than 20kb
find / -type d -size +20k
Find empty files and directories.
Fichiers
find ./ -type f -size 0
or
find ./ -type f –empty
Partages de fichiers
find ./ -type d –empty
Find files by age or modification time
Rechercher des fichiers datant de plus de n jours
find /path/ -type f -name '*.txt' -mtime +8
La -mtime +8
cherchera txt
les fichiers datant de plus de 8 jours.
By modification date
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
Find files based on access or modification
Recherchez des fichiers en fonction de la date ou de l'heure d'accès. Cela vous permet de voir les fichiers qui ont ou n'ont pas été consultés pendant 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 de base.
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
Find files modified within the last n days
Vous pouvez également rechercher les fichiers dans le /home
répertoire modifié au cours des 10 derniers jours à l'aide de la commande;
find /home -mtime -10
Find files modified within a specific period.
Par exemple, tous les fichiers modifiés entre 6 et 15 jours dans le répertoire personnel.
find /home -type f -mtime +6 -mtime -15
Files and directories accessed within the last 10 minutes
Pour trouver les fichiers consultés au cours des 10 dernières minutes, utilisez l'option -amin.
find . -amin -10 -type f
Sortie
./.bash_history
./.profileroot@ubuntu1804:~#
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, telle que 644, 655, 700, 777
, etc., ou des lettres telles que u=x, a=r+x,
et ainsi de suite
Vous pouvez spécifier le mode des trois manières suivantes.
- Sans préfixe lorsque vous souhaitez rechercher des fichiers avec les autorisations exactes spécifiées.
- Avec "
-
“Pour les fichiers avec au moins l'autorisation spécifiée. Cela renvoie les fichiers avec les autorisations spécifiées ainsi que des autorisations supplémentaires plus élevées. - En utilisant "
/
»Nécessite la spécification du propriétaire ou du groupe avec l'autorisation du fichier.
Find files with permission 777
find -perm 777
Sortie
./file1
Rechercher des fichiers avec au moins 766
trouver -perm -766
Sortie
./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 dispose d'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 l'exact 766
autorisations et peuvent avoir des autorisations supplémentaires aussi longues mais doivent avoir au moins celles spécifiées.
Find files writable by the owner
Nous allons maintenant utiliser le "/
»Pour rechercher les fichiers accessibles en écriture par leur propriétaire, leur groupe ou d'autres.
find -perm /222
.
./file2
./file3
./file1
Ce qui précède recherche les fichiers qui sont accessibles en écriture par leur propriétaire ou leur groupe.
Cela renvoie des fichiers inscriptibles par l'un ou l'autre mais pas nécessairement par les deux. Pour voir les fichiers, où les deux ont des autorisations d'écriture, utilisez le préfixe -.
find -perm -220
Sortie
./file2
./file1
Find files owned by a user
Trouver tous les fichiers appartenant à Jack
find /home -user jack
Sortie
/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi
Find specific files owned by a user
Trouver tous les fichiers texte appartenant à Jack
find /home -user jack -iname "*.txt"
Sortie
/home/jack/docs/file32.txt
Find and list files and directories together with their permissions
find -name "*.conf" | ls -l
Sortie
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.
Find files and change permissions
Recherchez et modifiez les autorisations de certains types de fichiers. Dans notre cas, nous travaillerons avec des fichiers PHP avec des autorisations différentes, comme indiqué ci-dessous.
jack@ubuntu1804:~/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 chercher 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 ver
répertoire, puis définit leur autorisation sur 755
(rwxr-xr-x
)
Résultats
jack@ubuntu1804:~/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
Find and change file and directory permissions
Rechercher des fichiers avec 644 autorisations et les modifier pour avoir 655 autorisations
find . -type f -perm 644 -exec chmod 655 {} ;
Vous pouvez également rechercher des répertoires avec des autorisations 644 et le remplacer par 755.
find . -type d -perm 644
Sortie
./docs
Le dossier docs a 644 autorisations
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Pour le régler sur 755
, nous courrons
find . -type d -perm 644 -exec chmod 755 {} ;
Maintenant, nous pouvons vérifier à nouveau pour voir exactement 755
find . -type d -perm 755
Sortie
.
./docs
D'en haut, nous pouvons voir que les répertoires racine et docs ont les autorisations 755.
Ls –la
commande donne les détails suivants
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Find and copy files or directories
Rechercher et copier un fichier spécifique dans un répertoire
La commande ci-dessous trouvera le file22.tx
t et copiez-le dans le ~/tmp/images
répertoire.
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 jpg
extension dans le répertoire actuel et copiez-les 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 ~/tmp/images
dossier.
Find and copy one file to many directories
Recherchez et copiez un seul dans plusieurs répertoires.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Cela trouvera le fichier hci et copiez-le dans les trois répertoires de /tmp/dir1/ /tmp/dir2/
et $HOME/3/
Find and move files to a different directory
Pour déplacer un fichier connu d'un répertoire vers un autre. Pour déplacer le universal.php
fichier;
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/ ;
Find certain files and move to a specific different folder
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
La commande recherche tous les fichiers dont le nom commence par uni
et ayant une extension. Il les déplace ensuite vers le répertoire /unifiles/
Find and move files based on age
Recherchez et déplacez les fichiers datant de plus de 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 dans 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 actuel est
find . -type f -name "file to delete" -exec rm -f {} ;
pour supprimer uniquement des fichiers ou
find . -type d -name "dir-to-delete" -exec rm -rf {} ;
pour supprimer uniquement les répertoires
Find and delete specific files only
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 {} ;
Remove both files and directories
find . -name "til*" -exec rm -rf {} ;
Cela supprimera les fichiers et les répertoires commençant par les lettres til.
Delete by extension
Voici comment vous pouvez localiser et supprimer tout txt
fichiers dans le répertoire courant. Remplace le txt
avec une autre extension telle que bak
, pdf
ou tout autre que vous souhaitez supprimer.
find . -type f -name "*.txt" -exec rm -f {} ;
Si vous souhaitez que le système vous invite à confirmer avant de supprimer chaque fichier, ajoutez l'option -i comme ci-dessous.
find . -type f -name "*.txt" -exec rm -i {} ;
Sortie
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 le –r
option pour assurer une suppression récursive. Cela garantit la suppression des répertoires vides et de ceux contenant des fichiers. le -f
L'option force la suppression et est utilisée à la fois pour les fichiers et les répertoires.
Find and delete files older than n days
Recherchez et supprimez les fichiers de sauvegarde datant de plus de 20 jours dans le répertoire actuel.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Cela supprimera tout fichiers .bak plus de 20 jours.
Find and delete directories only
Pour supprimer un répertoire appelé dir22
find . -type d -name dir22 -exec rm -rf {} ;
Assurez-vous que vous correspondez à la casse du nom de répertoire ou utilisez le -iname
option.
find . -type d -iname Dir22 -exec rm -rf {} ;
Supprime les deux Dir22
et dir22
Pour confirmer avant la suppression, utilisez l'option -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Sortie
rm: supprimer le répertoire './Dir22'? n
rm: supprimer le répertoire './dir22'? y
Dans notre cas, nous avons tapé n
pour l'annuaire Dir22
qui ne sera pas supprimé et y
pour le dir22
qui va maintenant être supprimé.
Find and remove empty files
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 {} ;
or
trouver ./ -type f -size 0 | xargs rm -f
or
trouver ./ -type f -taille 0 –supprimer
Find and remove empty directories
Pour supprimer les répertoires vides, nous utiliserons le d
option.
find ./ -type d -empty -exec rmdir {} ;
Une autre alternative consiste à utiliser supprimer au lieu de supprimer.
find ./ -type d -empty -delete
Veuillez noter que la suppression du système ou des fichiers 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 d'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ù.
Quelle est la prochaine?
Allez-y et essayez les commandes de recherche Linux ci-dessus dans votre laboratoire ou dans un environnement NON PRODUCTION. Voyez si vous pouvez en utiliser pour automatiser le nettoyage du système de fichiers avec crontab. Et, pour maîtriser Linux, regardez ceci Cours en ligne.