web-dev-qa-db-fra.com

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/fichier.xml".

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

Ce serait formidable si find fonctionne de cette manière, je peux donc exécuter find content/docs/file.xml, mais malheureusement, ce n’est pas le cas.

61
user69817

Transmettez un caractère générique * pour indiquer une correspondance pour quelque chose . Vous devez également vous échapper du *s, par exemple:

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

ou mettez 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 est dû au fait que * .c a été développé par le shell, ce qui a permis à find de recevoir une ligne de commande comme celle-ci:

trouver . -nom bigram.c code.c frcode.c Locate.c -print

Cette commande ne va bien sûr pas au travail. Au lieu de procéder ainsi, vous devriez inclure le motif entre guillemets ou échapper au caractère générique:

$ find. -nom\*. c -print

69
Bob

find a aussi une option -wholename find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword
8
technosaurus
find . -type f | grep "content/docs/file.xml"

ou juste

locate content/docs/file.xml
3
Nifle

Par exemple, la recherche de fichiers dans un emplacement à l'aide d'un astérisque/caractère générique (*) en tant que: dir=“/apps/*/instance01/" vous pouvez utiliser find ${dir} -name “*.jks”. mettre tous les fichiers dans un tableau comme celui-ci:

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" car -name n'accepte que les chaînes simples, 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 des chemins complets et non des chemins partiels, il est beaucoup plus facile de les placer dans des tableaux comme celui-ci:

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