GNU/Linux >> Tutoriels Linux >  >> Linux

Rechercher des fichiers et des répertoires sous Linux avec la commande find

Indépendamment de mon degré d'organisation, il semble qu'il y ait toujours des moments où je ne parviens pas à localiser un fichier. Parfois, c'est parce que je ne me souviens pas du nom du fichier en premier lieu. D'autres fois, je connais le nom, mais je ne me souviens pas où j'ai décidé de le sauvegarder. Il y a même des moments où j'ai besoin d'un fichier que je n'ai pas créé en premier lieu. Peu importe le dilemme, cependant, je sais que sur un système POSIX, j'ai toujours le find commande.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Installer la recherche

Le find La commande est définie par la spécification POSIX, qui crée la norme ouverte par laquelle les systèmes POSIX (y compris Linux, BSD et macOS) sont mesurés. En termes simples, vous avez déjà find installé tant que vous utilisez Linux, BSD ou macOS.

Cependant, tous ne find les commandes sont exactement les mêmes. Le GNU find La commande, par exemple, a des fonctionnalités que BSD ou Busybox ou Solaris find la commande peut ne pas avoir ou a mais implémente différemment. Cet article utilise GNU find du package findutils car il est facilement disponible et assez populaire. La plupart des commandes présentées dans cet article fonctionnent avec d'autres implémentations de find , mais si vous essayez une commande sur une plate-forme autre que Linux et obtenez des résultats inattendus, essayez de télécharger et d'installer la version GNU.

Rechercher un fichier par son nom

Vous pouvez localiser un fichier par son nom de fichier en fournissant le nom de fichier complet ou des parties du nom de fichier à l'aide d'expressions régulières. Le find La commande nécessite le chemin d'accès au répertoire dans lequel vous souhaitez effectuer la recherche, des options pour spécifier l'attribut que vous recherchez (par exemple, -name pour un nom de fichier sensible à la casse), puis la chaîne de recherche. Par défaut, votre chaîne de recherche est traitée littéralement :le find La commande recherche un nom de fichier qui correspond exactement à la chaîne que vous entrez entre guillemets, sauf si vous utilisez une syntaxe d'expression régulière.

Supposons que votre répertoire Documents contient quatre fichiers :Foo , foo , foobar.txt , et foo.xml . Voici une recherche littérale d'un fichier portant le nom "foo":

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

Vous pouvez élargir votre recherche en la rendant insensible à la casse avec le -iname choix :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Caractères génériques

Vous pouvez utiliser des caractères génériques shell de base pour élargir votre recherche. Par exemple, l'astérisque (* ) représente n'importe quel nombre de caractères :

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents /examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Un point d'interrogation (? ) représente un seul caractère :

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Ce n'est pas une syntaxe d'expression régulière, donc le point (. ) représente un point littéral dans cet exemple.

Expressions régulières

Vous pouvez également utiliser des expressions régulières. Comme avec -iname et -name , il existe à la fois une option sensible à la casse et une option insensible à la casse. Contrairement au -name et -iname options, cependant, un -regex et -iregex la recherche est appliquée au chemin entier , pas seulement le nom du fichier. Cela signifie que si vous recherchez foo , vous n'obtenez aucun résultat car foo ne correspond pas à /home/tux/Documents/foo . Au lieu de cela, vous devez soit rechercher le chemin complet, soit utiliser une séquence de caractères génériques au début de votre chaîne :

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Rechercher un fichier modifié au cours de la semaine dernière

Pour trouver un fichier que vous avez modifié la semaine dernière, utilisez le -mtime option avec un nombre (négatif) de jours dans le passé :

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples /foo.xml
/home/tux/Documents/examples/foobar.txt

Rechercher un fichier modifié dans une plage de jours

Vous pouvez combiner -mtime options pour localiser un fichier dans une plage de jours. Pour le premier -mtime argument, indiquez le nombre de jours le plus récent où vous avez pu modifier le fichier, et pour le second, indiquez le plus grand nombre de jours. Par exemple, cette recherche recherche les fichiers avec des temps de modification plus d'un jour dans le passé, mais pas plus de sept :

$ find ~ -mtime +1 -mtime -7 

Limiter une recherche par type de fichier

Il est courant d'optimiser les résultats de find en spécifiant le type de fichier que vous recherchez. Vous ne devriez pas utiliser cette option si vous n'êtes pas sûr de ce que vous recherchez, mais si vous savez que vous recherchez un fichier et non un répertoire, ou un répertoire mais pas un fichier, cela peut être un excellent filtre à utiliser. L'option est -type , et ses arguments sont un code alphabétique représentant quelques types de données différents. Les plus courantes sont :

  • d - répertoire
  • f - fichier
  • l - lien symbolique
  • s - prise
  • p - canal nommé (utilisé pour FIFO)
  • b - bloc spécial (généralement une désignation de disque dur)

Voici quelques exemples :

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/ Téléchargements/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

Ajuster la portée

Le find La commande est récursive par défaut, ce qui signifie qu'elle recherche les résultats dans les répertoires des répertoires contenus dans les répertoires (et ainsi de suite). Cela peut devenir écrasant dans un grand système de fichiers, mais vous pouvez utiliser le -maxdepth option pour contrôler la profondeur dans votre structure de dossiers que vous voulez find descendre :

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

Vous pouvez également définir la profondeur minimale de récursivité avec -mindepth :

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

Téléchargez l'aide-mémoire

Cet article ne couvre que les fonctions de base de find . C'est un excellent outil pour rechercher dans votre système, mais c'est aussi une interface très utile pour la puissante commande parallèle. Il existe de nombreuses raisons d'apprendre find , alors téléchargez notre find gratuit aide-mémoire pour vous aider à en savoir plus sur la commande.


Linux
  1. Copiez et collez sur la ligne de commande Linux avec xclip

  2. Trouver des fichiers et des répertoires sous Linux comme un pro

  3. Trouvez les fichiers et répertoires les plus volumineux sous Linux

  4. Comment rechercher des fichiers avec la commande fd sous Linux

  5. rechercher et supprimer des fichiers avec de l'espace à l'aide de la commande find sous Linux

Commande de recherche Linux avec des exemples pratiques

Comment rechercher des fichiers avec la commande fd sous Linux

Trouvez facilement des fichiers et des répertoires sur Linux

Tutoriel sur la commande de recherche Linux (avec exemples)

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires