web-dev-qa-db-fra.com

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

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

1398
john

Utilisez find pour cela:

find . -name "foo*"

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

2081
tux21b

Piping find dans grep est souvent plus pratique; il vous donne toute la puissance des expressions régulières pour la correspondance générique arbitraire.

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

~$ find . -print | grep -i foo
182
Paul Whipp

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!

118
IslandCow

Si votre shell prend en charge une nouvelle option de globbing (peut être activé avec: shopt -s globstar), vous pouvez utiliser:

echo **/*foo*

pour rechercher des fichiers ou des dossiers de manière récursive. Ceci est supporté par Bash 4, zsh et autres shells similaires.


Personnellement j'ai cette fonction Shell définie:

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

Remarque: La ligne ci-dessus peut être collée directement dans Shell ou ajoutée au fichier ~/.bashrc de votre utilisateur.

Ensuite, je peux rechercher tous les fichiers en tapant:

f some_name

Vous pouvez également utiliser un utilitaire fd avec une syntaxe simple, par exemple. fd pattern.

21
kenorb
find -L . -name "foo*"

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

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

Dans la correspondance générique, vous pouvez fournir la chaîne que vous souhaitez faire correspondre, par exemple. * .c (pour tous les fichiers c) 

20
P_Jain

fd

Si find est trop lent, essayez l'utilitaire fd - une alternative simple et rapide à find écrite en rouille.

Syntaxe:

fd PATTERN

Démo:

Page d'accueil: https://github.com/sharkdp/fd

12
kenorb

Vous pouvez utiliser:

# find . -type f  -name 'text_for_search'

Si vous voulez utiliser REGX, utilisez -iname

# find . -type f  -iname 'text_for_search'
8
user8848899

Manière par défaut de rechercher un fichier récursif, et disponible dans la plupart des cas est

find . -name "filepattern"

Il commence la traversée récursive pour le nom de fichier ou le modèle à partir du répertoire actuel dans lequel 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 de manuel ne sont pas disponibles sur votre système

find --help

Cependant, il existe des outils plus modernes et plus rapides que la recherche, qui parcourent l’ensemble du système de fichiers et indexent vos fichiers. Un de ces outils communément appelé localiser ou slocate/mlocate, vous devriez vérifier installé, il doit initialiser la base de données; si le script d'installation ne le fait pas pour vous, vous pouvez le faire manuellement en tapant

Sudo updatedb

Et, 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 actuel, vous pouvez taper:

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

Il examinera dans sa base de données de fichiers et imprimera rapidement les noms de chemins correspondant au motif que vous avez saisi. Pour voir la liste complète des options de localisation, tapez: locate --help ou man locate

De plus, vous pouvez configurer la commande localize pour mettre à jour sa base de données à l’heure prévue via le travail cron. Par conséquent, un exemple de cron qui met à jour la base de données à 1 heure ressemble à ceci:

0 1 * * * updatedb

Ces tâches cron doivent être configurées par root, car updatedb a besoin du privilège root pour parcourir tout le système de fichiers.

4
Aleksandar Pavić

pour la recherche de fichier
find / -xdev -name settings.xml -> ordinateur complet
find ./ -xdev -name settings.xml -> répertoire actuel et son sous-répertoire

pour les fichiers avec type d'extension

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

La commande ci-dessous permet de rechercher des fichiers 

1) Indépendamment de l'affaire
2) Résultat Exclusion de dossiers sans autorisation
3) Recherche à partir de la racine ou du chemin que vous aimez. Changez/avec le chemin que vous préférez. 

Syntaxe: 
find -iname '' 2> & 1 | grep -v "Autorisation refusée"

Exemple

find/-iname 'C * .xml' 2> & 1 | grep -v "Autorisation refusée"

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"
1
MukeshKoshyM

La commande suivante listera tous les fichiers ayant le nom exact "pattern" (par exemple) dans le sous-répertoire et ses sous-répertoires. 

find ./ -name "pattern"

1
anshul

Ceci recherchera tous les fichiers liés dans les sous-répertoires courants et sous-jacents, en calculant leur nombre de lignes séparément et totalement:

find . -name "*.wanted" | xargs wc -l
0
Jay Yang

Si vous souhaitez 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 * .conf noms.

0
Reza Harasani