Comment trouver des fichiers et des répertoires sous Linux

Dans les systèmes d'exploitation Linux, la commande find peut être utilisée pour rechercher des fichiers et des répertoires sur votre ordinateur. Pour continuer, sélectionnez un lien dans la liste suivante ou parcourez chaque section dans l'ordre.

Remarque: Pour utiliser find, commencez par ouvrir une session de terminal pour accéder à la ligne de commande.

Fonctionnalité de base de find

Lancer find sans aucune option produira une liste de chaque fichier et répertoire dans et sous le répertoire de travail. Par exemple, si votre répertoire de travail est / home / hope / Documents, l'exécution de find produira les éléments suivants:

  • Chaque fichier dans / home / hope / Documents .
  • Chaque sous-répertoire dans / home / hope / Documents .
  • Chaque fichier dans chacun de ces sous-répertoires.

Voyons cela en action. Premièrement, vérifions notre répertoire de travail en utilisant la commande pwd:

pwd

 / home / espoir / Documents 

Maintenant, exécutons find sans aucune option:

trouver

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Dans cet exemple, nous voyons un total de dix fichiers et quatre sous-répertoires dans et sous notre dossier Documents .

Notez que la sortie commence par un seul point, qui représente le répertoire de travail. Lancer find sans option revient à spécifier que la recherche doit commencer dans le répertoire de travail, comme ceci:

trouver .

L'exemple ci-dessus est la "bonne" façon d'utiliser find . Si vous essayez de l'utiliser sur un autre système d'exploitation de type UNIX, tel que FreeBSD, vous constaterez que la spécification d'un répertoire est obligatoire. Il est donc recommandé d'utiliser cette forme de la commande.

Spécifier où chercher

Pour ne répertorier que les fichiers et sous-répertoires contenus dans le répertoire / home / hope / Documents / images, spécifiez-le comme premier argument de la commande:

trouver / accueil / espoir / documents / images

 / home / hope / Documents / images / home / hope / Documents / images / hp / home / hope/documents/images/hp/snape.jpg / home / hope/documents/images/hp/harry.jpg / home / hope / Documents / images / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg 

Notez que le chemin complet est également indiqué dans les résultats.

Si notre répertoire de travail est / home / hope / Documents, nous pouvons utiliser la commande suivante, qui trouve les mêmes fichiers:

trouver ./images

Mais cette fois, la sortie reflète l'emplacement de départ de la recherche et se présente comme suit:

 ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg 

Par défaut, la recherche examinera tous les sous-répertoires de votre emplacement de départ. Si vous souhaitez limiter le nombre de niveaux de sous-répertoires à rechercher, vous pouvez utiliser l'option -maxdepth avec un nombre.

Par exemple, spécifier -maxdepth 1 recherchera uniquement dans le répertoire où la recherche commence. Si des sous-répertoires sont trouvés, ils seront listés mais non recherchés.

trouver . -maxdepth 1

 . ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

Spécifier -maxdepth 2 recherchera le répertoire et un sous-répertoire deep:

trouver . -maxdepth 2

 . ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Spécifier -maxdepth 3 recherchera un niveau plus profond que cela:

trouver . -maxdepth 3

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Trouver par nom

Pour que vos résultats de recherche ne correspondent qu'aux fichiers et aux répertoires portant un nom donné, utilisez l'option -name et mettez-le entre guillemets:

trouver . -nom "picard.jpg"

 ./images/memes/picard.jpg 

Vous pouvez également utiliser des caractères génériques dans le nom de votre fichier. Par exemple, pour rechercher tous les fichiers dont le nom se termine par .jpg, vous pouvez utiliser un astérisque pour représenter le reste du nom de fichier. Lorsque vous exécutez la commande, le shell transfèrera le nom du fichier dans tout ce qui correspond au modèle:

trouver . -name "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

Notez que notre commande n'a pas répertorié le fichier dont l'extension ( JPG ) est en majuscule. En effet, contrairement aux autres systèmes d'exploitation, tels que Microsoft Windows, les noms de fichiers Linux sont sensibles à la casse.

Pour effectuer une recherche insensible à la casse, utilisez l'option -iname :

trouver . -iname "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Trouver uniquement des fichiers ou uniquement des répertoires

Pour répertorier uniquement les fichiers et omettre les noms de répertoire de vos résultats, spécifiez -type f :

trouver . -type f

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01.01-dual .iso 

Pour ne répertorier que les répertoires et omettre les noms de fichiers, spécifiez -type d :

trouver . -type d

 . ./images ./images/hp ./images/memes ./hp-fanfic 

Recherche de fichiers en fonction de la taille

Pour afficher uniquement les fichiers d'une certaine taille, vous pouvez utiliser l'option -size . Pour spécifier la taille, utilisez un signe plus ou un signe moins (pour «plus que» ou «moins que»), un nombre et un suffixe quantitatif tel que k, M ou G.

Par exemple, pour rechercher des fichiers de "plus de 50 kilo-octets", utilisez -size + 50k :

trouver . -taille + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Pour les fichiers "plus grands que 10 mégaoctets", utilisez -size + 10M :

trouver . -taille + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Pour "plus grand que 1 gigaoctet", utilisez -size + 1G :

trouver . -taille + 1G

 ./archlinux-2016.02.01-dual.iso 

Pour les fichiers d'une certaine taille, utilisez deux options de taille. Par exemple, pour rechercher des fichiers "supérieurs à 10 mégaoctets, mais inférieurs à 1 gigaoctet", spécifiez -size + 10M -size -1G :

trouver . -taille + 10M -taille -1G

 ./gimp-2.8.16.tar.bz2 

Recherche de fichiers en fonction d'une modification, d'un accès ou d'un changement d'état

L'option -mtime limite la recherche du nombre de jours depuis la modification du contenu du fichier. Pour spécifier des jours dans le passé, utilisez un nombre négatif. Par exemple, pour rechercher uniquement les fichiers qui ont été modifiés au cours des deux derniers jours (il y a 48 heures), utilisez -mtime -2 :

trouver . -mtime -2

L'option -mmin fait la même chose, mais en termes de minutes, pas de jours. Par exemple, cette commande affiche uniquement les fichiers modifiés au cours de la dernière demi-heure:

trouver . -mmin -30

Une option similaire est -ctime, qui vérifie la dernière modification du statut d'un fichier, mesurée en jours. Un changement d'état est un changement dans les métadonnées du fichier. Par exemple, la modification des autorisations d'un fichier implique un changement d'état.

L'option -cmin recherche un changement d'état mesuré en minutes.

Vous pouvez également rechercher quand un fichier a été accédé pour la dernière fois, c'est-à-dire quand son contenu a été visualisé pour la dernière fois. L'option -atime est utilisée pour rechercher des fichiers en fonction de leur temps d'accès le plus récent, mesuré en jours.

L'option -amin appliquera la même restriction de recherche, mais mesurée en minutes.

Rediriger la sortie dans un fichier texte

Si vous effectuez une recherche très volumineuse, vous voudrez peut-être enregistrer vos résultats de recherche dans un fichier afin de pouvoir les visualiser ultérieurement. Vous pouvez le faire en redirigeant votre recherche dans un fichier:

trouver . -iname "* .jpg"> images.txt

Vous pouvez ensuite ouvrir vos résultats dans un éditeur de texte ou les imprimer à l'aide de la commande cat .

chat images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Vous pouvez également diriger votre sortie vers la commande tee, qui imprimera la sortie à l'écran et l'écrira dans un fichier:

trouver . -taille + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

chat bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Suppression des messages d'erreur

Le message d'erreur «Autorisation refusée» peut s'afficher lors d'une recherche. Par exemple, si vous recherchez le répertoire racine en tant qu'utilisateur normal:

trouver /

 find: `/ var / lib / sudo / ts ': Autorisation refusée find:` / var / lib / sudo / lectured': Autorisation refusée find: '/ var / lib / polkit-1': Autorisation refusée find: `/ var / lib / conteneur ': autorisation refusée: `/var/lib/gdm3/.dbus': autorisation refusée: '/var/lib/gdm3/.config/ibus': autorisation interdite ... 

Vous recevrez ce message d'erreur si find tente d'accéder à un fichier que votre compte d'utilisateur n'est pas autorisé à lire. Vous pourrez peut-être effectuer la recherche en tant que superutilisateur ( root ), qui dispose d’un accès complet à tous les fichiers du système. Mais il n'est pas recommandé de faire les choses en tant que root, à moins qu'il n'y ait pas d'autres options.

Si tout ce que vous avez à faire est de masquer les messages "Autorisation refusée", vous pouvez ajouter 2 &> 1 | grep -v "Autorisation refusée" à la fin de votre commande, comme ceci:

trouver / 2> & 1 | grep -v "Autorisation refusée"

L'exemple ci-dessus filtre les messages "Autorisation refusée" de votre recherche. Comment?

2> & 1 est une redirection spéciale qui envoie des messages d'erreur à la sortie standard pour diriger les lignes combinées de la sortie vers la commande grep . grep -v effectue ensuite une correspondance inverse sur "Permission denied", en affichant uniquement les lignes qui ne contiennent pas cette chaîne.

La redirection et l'utilisation de grep pour filtrer les messages d'erreur sont une technique utile lorsque "Autorisation refusée" encombre les résultats de votre recherche et que vous ne pouvez pas effectuer la recherche en tant que root.

Exemples

trouver ~ /. -name "* .txt" -amin -120

Trouvez tous les fichiers de votre répertoire personnel et ceux qui se terminent par l’extension " .txt ". Afficher uniquement les fichiers consultés au cours des deux dernières heures.

trouver . -name "* .zip" -size + 10M -mtime -3

Trouvez tous les fichiers du répertoire de travail et ci-dessous dont le nom porte l'extension " .zip " et dont la taille est supérieure à 10 mégaoctets. Affiche uniquement les fichiers dont le contenu a été modifié au cours des 72 dernières heures.

trouver . -iname "* report *" -type f -maxdepth 2

Effectuez une recherche sans distinction de casse des fichiers contenant le mot " rapport " dans leur nom. Si la recherche trouve un répertoire avec le nom "rapport", ne l'affichez pas. Rechercher uniquement dans le répertoire de travail et un niveau de répertoire en dessous.

find / -name "* init *" 2> & 1 | grep -v "Autorisation refusée" | tee ~ / initfiles.txt

Recherchez tous les fichiers du système dont le nom contient " init ", en supprimant les messages d'erreur. Affichez les résultats à l'écran et exportez-les dans un fichier de votre répertoire personnel nommé " initfiles.txt ".