logo

Rechercher une commande sous Linux/Unix avec des exemples

La commande find nous aide à trouver un fichier particulier dans un répertoire. Il est utilisé pour trouver la liste des fichiers pour les différentes conditions telles que l'autorisation, la propriété de l'utilisateur, la modification, la date/heure, la taille, etc.

Dans les systèmes d'exploitation de type Unix et autres, la commande find est un utilitaire de ligne de commande qui recherche des fichiers sur la base de quelques formats spécifiés par l'utilisateur et imprime le chemin d'accès de tous les objets correspondants ou, si d'autres actions sont demandées, implémente cette action sur tous les objets correspondants.

Il démarre une recherche à partir d'un emplacement de départ souhaité et, ensuite, parcourt récursivement les répertoires (nœuds) d'une structure hiérarchique (généralement un arbre). La commande find peut rechercher et parcourir différents systèmes de partitions de fichiers appartenant à un ou plusieurs périphériques de stockage sous le répertoire de départ.

Le format de recherche contient un modèle de correspondance avec le nom de fichier ou la plage de temps pour la correspondance avec l'heure de modification ou l'heure d'accès au fichier. La commande find fournit par défaut une liste de tous les fichiers du répertoire de travail actuel. Cependant, les utilisateurs peuvent restreindre la recherche au niveau maximum souhaité dans le répertoire de départ.

Les programmes de localisation associés appliquent une base de données de fichiers indexés obtenue à partir de la commande fine pour offrir une technique plus rapide de recherche dans l'ensemble du système de fichiers par nom.

L'utilitaire de recherche est fourni par défaut avec la plupart des Distributions Linux , nous n’avons donc pas besoin d’installer de package supplémentaire. C'est l'une des commandes les plus essentielles et les plus utilisées du Linux système.

 find 

Les deux options déterminent comment find doit prendre en compte les liens symboliques. La nature par défaut est de ne jamais rechercher de liens symboliques. Le drapeau, c'est-à-dire -L , conduira à rechercher des liens symboliques. Le drapeau, c'est-à-dire -H , poursuivra simplement les liens symboliques tout en continuant avec les arguments de ligne de commande. Les drapeaux sont mentionnés dans le standard POSIX pour la commande find. Une extension de base est un drapeau, c'est-à-dire -P , pour désactiver explicitement le lien symbolique suivant.

Au moins un chemin doit anticiper l'expression. La commande find peut interpréter en interne les caractères génériques et les commandes doivent être soigneusement citées pour gérer le shell globbing.

Les composants d'expression sont isolés par la limite de l'argument de ligne de commande, généralement indiquée par des espaces dans la syntaxe du shell. Ils sont considérés du côté gauche vers le côté droit. Ils peuvent inclure des composants logiques comme OR et AND ainsi que des prédicats (actions et filtres). GNU find contient plusieurs autres fonctionnalités non mentionnées par POSIX.

Les symboles suivants sont utilisés pour spécifier le répertoire :

(.) : Pour le nom du répertoire actuel

(/) : Pour le répertoire racine

Bref historique de la commande Find

La commande find est apparue dans la version 5 d'Unix en tant qu'élément du Établi du programmeur projet et a été spécifié par Dick Haight avec cpio, qui ont été développés pour être utilisés ensemble.

À l'origine, l'implémentation GNU de la commande find était spécifiée par Éric Decker . Plus tard, il a été développé par David MacKenzie, Tim Wood , et Jay Plett . De plus, la commande find a été portée sur le système d'exploitation IBM i.

commande d'étirement autocad

Prédicats

Les primaires les plus utilisées sont :

    -modèle de nom :Il vérifie que le nom du fichier est identique ou non au modèle shell-glob donné.-type type :Il vérifie que le fichier est d'un type fourni.-imprimer:Cela donne toujours la vraie valeur. Il imprime le nom du fichier actuel et une nouvelle ligne sur la sortie standard.-imprimer0 :Cela donne toujours la vraie valeur. Il imprime le nom du fichier actuel et un caractère nul sur la sortie standard. Non nécessaire par POSIX.-exec programme [argument ...] ; :Cela donne toujours la vraie valeur. Il exécute un programme avec les arguments donnés fixes et le chemin du fichier actuel.-exec programme [argument ...] { } + :Cela donne toujours la vraie valeur. Il exécute un programme avec les arguments donnés fixes et autant de chemins que possible. Pour presque toutes les implémentations, d'autres occurrences de {} signifient des copies supplémentaires du nom donné (aspect non nécessaire par POSIX).-ok programme [argument ...] ; :C'est la même chose que -exec, mais renverra false ou true si le programme donne 0.

Recherchez les valeurs par défaut d'implémentation de -print au cas où les conditions seraient vraies si l'expression n'utilise aucun des éléments -ok, -exec, -print ou -print0.

Les opérateurs

Les opérateurs améliorent les expressions de la commande find. Ils sont mentionnés par ordre de priorité décroissant :

    ( expression ):Cet opérateur peut forcer la priorité.! expression :Si expr renvoie false, elle renvoie true.
  • expr1 expr2 (ou expr1 -a expr2 : AND. expr2 n'est pas évalué si expr1 est faux.
  • expr1 -o expr2 : OU. expr2 n'est pas évalué si expr1 est vrai.

Exemples de la commande find

Voyons les exemples suivants de la commande find :

Rechercher des fichiers par nom

Nous pouvons rechercher tous les fichiers se terminant par l'extension « .txt ». Pour ce faire, exécutez la commande ci-dessous :

 find . -name '*.txt' 

La commande ci-dessus listera tous les fichiers texte du répertoire de travail actuel. Considérez le résultat ci-dessous :

Trouver Linux

À partir de la sortie ci-dessus, tous les fichiers ayant l'extension « .txt » sont répertoriés avec la commande find.

Recherche de fichiers par type

Le paramètre '-type' est utilisé pour spécifier le type de fichier.

Certains types de fichiers sont les suivants :

  • f : fichier normal
  • d : répertoire
  • l : liens symboliques
  • c : périphériques de caractères
  • b : bloquer les appareils

Considérez la commande ci-dessous :

 find . -type d -name '*.bak' 

La commande ci-dessus listera tous les répertoires ayant l'extension « .bak ». Considérez le résultat ci-dessous :

Trouver Linux

À partir de la sortie ci-dessus, la commande 'find . -type d -name '*.bak' affiche tous les répertoires se terminant par '.bak'.

Rechercher des fichiers plus récents

Le paramètre '-newer' permet de rechercher les fichiers plus récents que le fichier mentionné. Considérez la commande ci-dessous :

 find . -newer msg.txt 

La commande ci-dessus affichera tous les fichiers plus récents que « msg.txt » du répertoire de travail actuel. Considérez le résultat ci-dessous :

exemples de machine Moore
Trouver Linux

D'après la sortie ci-dessus, tous les fichiers affichés sont plus récents que le fichier « msg.txt ».

Rechercher et supprimer un fichier

L'option '-delete' est utilisée pour supprimer un fichier spécifique. Nous devons être très prudents lors de l'utilisation de cette commande car il n'y a pas d'option d'annulation si elle est exécutée une fois. Considérez la commande ci-dessous :

 find . -name Demo.txt -delete 

La commande ci-dessus supprimera le fichier « Demo.txt » du répertoire de travail actuel. Considérez le résultat ci-dessous :

Trouver Linux

Trouver un répertoire

L'option ' type -d' est utilisée pour rechercher un répertoire. Considérez la commande ci-dessous :

 find . type -depth -name Newdirectory 

La commande ci-dessus trouvera l'emplacement « Newdirectory ». Considérez le résultat ci-dessous :

Trouver Linux

Rechercher des fichiers par heure de modification

L'option '-mtime', suivie du nombre de jours, permet de retrouver les fichiers par modification. Le nombre de jours peut être positif ou négatif. La valeur négative sera utilisée pour moins que -1 pour le dernier jour, et de même, +1 trouvera le fichier d'il y a plus d'un jour. Considérez la commande ci-dessous :

 find ./Newdirectory -mtime -1 

La commande ci-dessus trouvera les fichiers modifiés au cours du dernier jour. Considérez le résultat ci-dessous :

Trouver Linux

Rechercher des fichiers avec autorisation

L'option '-perm' est utilisée pour rechercher des fichiers par autorisation. Exécutez la commande find avec l'option '-perm' et transmettez la valeur requise. Considérez la commande ci-dessous :

 find ./ -perm 777 

La commande ci-dessus répertoriera les fichiers du répertoire spécifié que tout le monde pourra lire, écrire et exécuter.

Rechercher et remplacer des fichiers

Pour rechercher et remplacer des fichiers, nous devons combiner la commande find avec la commande sed. Pour opérer sur des fichiers, utilisez l'option '-exec' avec la commande find. Considérez la commande ci-dessous :

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

à partir de la commande ci-dessus, l'occurrence spécifiée sera remplacée. Considérez le résultat ci-dessous :

Trouver Linux

Rechercher du texte dans plusieurs fichiers

Nous pouvons faire une autre combinaison de la commande find avec la commande grep pour rechercher le texte des différents fichiers. Considérez la commande ci-dessous :

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

La commande ci-dessus trouvera les lignes contenant le texte « démo » dans tous les fichiers texte du répertoire « Newdirectory ». Considérez le résultat ci-dessous :

b+ arbres
Trouver Linux

À partir de la sortie ci-dessus, nous pouvons voir que les lignes sur lesquelles le texte « démo » a été affichée.

Rechercher dans chaque répertoire

 $ find / -name file1 -type f -print 

La commande ci-dessus recherche tous les répertoires d'un fichier normal dont le titre est file1 et l'imprime à l'écran. En général, ce n'est pas une bonne idée de rechercher des fichiers de cette façon. Cela peut prendre beaucoup de temps. Il est donc préférable de mentionner l'annuaire. Quelques systèmes d'exploitation peuvent monter des systèmes de fichiers (dynamiques) qui ne sont pas favorables à la commande find. Les noms de fichiers plus compliqués contenant des caractères propres au shell peuvent nécessiter d'être fermés entre guillemets simples.