Question 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?


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?


1202
2018-05-05 23:01


origine


Réponses:


Utilisation trouver pour ça:

find . -name "foo*"

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


1788
2018-05-05 23:03



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

164
2017-08-15 06:56



find va trouver tous les fichiers qui correspondent à un modèle:

find . -name "*foo"

Cependant, si vous voulez une image:

tree -P "*foo"

J'espère que cela t'aides!


105
2018-05-05 23:15



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


16
2018-01-14 02:47



Si vous soutenez des supports une nouvelle option de globbing (Activez-le par: shopt -s globstar), vous pouvez utiliser:

echo **/*foo*

pour trouver des fichiers ou des dossiers récursivement. Ceci est supporté par Bash 4, zsh et des shells similaires.


Personnellement, j'ai cette fonction shell définie:

f() { find . -name "*$1*"; }

Note: Au-dessus de la ligne peut être collé directement à la coquille ou ajouté dans votre utilisateur ~/.bashrc fichier.

Ensuite, je peux rechercher des fichiers en tapant:

f some_name

Bien que ce soit presque la même chose que d'utiliser fd utilitaire.


16
2018-01-13 16:23



find <directory_path>  -type f -name "<wildcard-match>"

Dans la correspondance générique, vous pouvez indiquer la chaîne que vous souhaitez associer, par ex. * .c (pour tous les fichiers c)


15
2018-02-05 13:32



Vous pouvez utiliser:

# find . -type f  -name 'text_for_search'

Si vous voulez utiliser l'utilisation de REGX -iname

# find . -type f  -iname 'text_for_search'

6
2017-10-29 16:09



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.


4
2017-08-09 06:27