126 votes

Comment rechercher un fichier par son nom et son chemin partiel ?

Souvent, j'ai un nom de fichier et son chemin partiel, par exemple "contenu/docs/file.xml".

Existe-t-il un moyen simple de rechercher ce fichier, sans couper manuellement son nom en plusieurs parties pour fournir séparément le nom du répertoire et le nom du fichier ?

Ce serait bien si find a fonctionné de cette façon, donc je pouvais exécuter find content/docs/file.xml mais malheureusement, ce n'est pas le cas.

143voto

Bob Points 58080

Passez dans un * joker pour indiquer une correspondance pour tout ce qui est . Vous devez également échapper à la * s, par exemple :

find . -path \*content/docs/file.xml

ou mettre le motif entre guillemets, par exemple :

find . -path "*content/docs/file.xml"

Comme le décrit la page de manuel :

$ find . -name *.c -print

find : les chemins doivent précéder l'expression

Cela se produit parce que *.c a été développé par le Shell ce qui fait que find reçoit en fait une ligne de commande comme celle-ci :

trouver . -name bigram.c code.c frcode.c locate.c -print

Cette commande ne fonctionnera bien sûr pas. Au lieu de faire les choses de cette façon, vous devriez mettre le motif entre guillemets ou échapper au joker ou échapper au caractère générique :

$ find . -name \*.c -print

16voto

technosaurus Points 1042

Trouver a un -path (ou l'équivalent mais moins portable -wholename ) également find $top_dir -wholename *string*

find /usr -path *in/abiw*

>/usr/bin/abiword

4voto

user2013 Points 2301
find . -type f | grep "content/docs/file.xml"

ou simplement

locate content/docs/file.xml

2voto

wiktor.2200 Points 357

Si vous ne voulez pas rester conforme à la norme posix, au moins sous Linux, vous pouvez également utiliser la commande -regex (et -regextype ) à cette fin.

Par exemple :

find folder/ -regextype posix-extended -regex "(.*/)?deer/(.*/)?beer"

correspondra à

folder/deer/beer
folder/deer/dir/forest/beer/
folder/forest/deer/dir/forest/beer/

etc.

Voir linux man pour plus de détails.

0voto

user450631 Points 17

Par exemple, la recherche de fichiers dans un emplacement en utilisant l'astérisque/le caractère générique ( * ) comme : dir=“/apps/*/instance01/" vous pourriez utiliser find ${dir} -name “*.jks” . en mettant tous les fichiers dans un tableau comme ceci :

arr=(`find ${dir} -name “*.jks"`)

si vous voulez obtenir des fichiers avec d'autres extensions, utilisez 'ou' comme ceci :

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" parce que -name n'accepte qu'une seule chaîne de caractères, utilisez donc 'ou'.

Enfin, mettez tout dans un tableau comme ceci :

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

Si vous avez les chemins complets et non les chemins partiels, il est beaucoup plus facile de les mettre dans des tableaux comme celui-ci :

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X