linux - script - shell unix




Comment puis-je rechercher récursivement tous les fichiers dans les sous-dossiers et les fichiers courants en fonction de la correspondance générique? (7)

La recherche de tuyauterie dans grep est souvent plus pratique; il vous donne toute la puissance des expressions régulières pour une correspondance générique arbitraire.

Par exemple, pour trouver tous les fichiers avec la chaîne insensible à la casse "foo" dans le nom de fichier:

~$ find . -print | grep -i foo

Comment puis-je rechercher récursivement tous les fichiers dans les sous-dossiers et les fichiers courants en fonction de la correspondance générique?


Moyen par défaut pour rechercher un fichier récursif, et disponible dans la plupart des cas est

find . -name "filepattern"

Il commence le parcours récursif pour le nom de fichier ou le modèle dans le répertoire en cours où vous êtes positionné. Avec la commande find, vous pouvez utiliser des caractères génériques, et divers commutateurs, pour voir la liste complète des options, tapez

man find

ou si les pages man ne sont pas disponibles sur votre système

find --help

Cependant, il existe des outils plus modernes et plus rapides, qui parcourent tout votre système de fichiers et l'indexation de vos fichiers, un outil commun est locate ou slocate / mlocate, vous devriez vérifier le manuel de votre système d'exploitation pour l'installer, et une fois installé il doit initier la base de données, si le script d'installation ne le fait pas pour vous, il peut être fait manuellement en tapant

sudo updatedb

Et, pour l'utiliser pour rechercher un type de fichier particulier

locate filename

Ou, pour rechercher un nom de fichier ou un modèle dans le répertoire courant, vous pouvez taper:

 pwd | xargs -n 1 -I {} locate "filepattern"

Il parcourra sa base de données de fichiers et affichera rapidement les noms de chemin correspondant au motif que vous avez tapé. Pour voir la liste complète des options de locate, tapez: locate --help ou man locate

De plus, vous pouvez configurer locate pour mettre à jour sa base de données à des heures planifiées via le travail cron, donc cron exemple qui met à jour db à 1AM ressemblerait à:

0 1 * * * updatedb

Ces tâches cron doivent être configurées par root, puisque updatedb a besoin du privilège root pour traverser l'ensemble du système de fichiers.


Si vous voulez rechercher un fichier spécial avec un caractère générique, vous pouvez utiliser le code suivant:

find . -type f -name "*.conf"

Supposons que vous souhaitiez rechercher tous les fichiers .conf à partir d'ici:

. signifie que la recherche a commencé à partir d'ici (lieu actuel)
-type signifie le type d'élément de recherche qui est ici le fichier (f).
-name signifie que vous voulez rechercher des fichiers avec des noms * .conf .


Utilisez find pour cela:

find . -name "foo*"

find besoins un point de départ, et le . (point) pointe vers le répertoire en cours.


pour la recherche de fichiers
find / -xdev -name settings.xml -> ensemble de l'ordinateur
find ./ -xdev -name settings.xml -> répertoire en cours et son sous-répertoire

pour les fichiers avec le type d'extension

find . -type f -name "*.iso"

find trouvera tous les fichiers correspondant à un modèle:

find . -name "*foo"

Cependant, si vous voulez une image:

tree -P "*foo"

J'espère que cela t'aides!


find -L . -name "foo*"

Dans quelques cas, j'ai eu besoin du paramètre -L pour gérer les liens de répertoire symboliques. Par défaut, les liens symboliques sont ignorés. Dans ces cas, c'était assez déroutant car je devais changer de répertoire pour un sous-répertoire et voir le fichier correspondant au modèle mais trouver ne retournerait pas le nom du fichier. L'utilisation de -L résout ce problème. Les options de lien symbolique pour trouver sont -P -L -H





shell