Cette commande trouve tous les fichiers nommés "log_7" de manière récursive dans le dossier actuel.
./ke/f2/log_7
Supposons que de nombreux sous-dossiers de l'arborescence de dossiers actuelle contiennent un fichier du même nom "log_7":
./am/f1/log_7 ./ke/f2/log_7 ./sa/f6/log_7 .. ./xx/f97/log_7
Existe-t-il un moyen de dire explicitement que nous voulons uniquement rechercher "log_7" dans un nom de dossier "f2"? de sorte que le résultat de find ne répertorie qu'une seule entrée:
find . -name log_7
3 Réponses :
Vous pouvez utiliser une expression régulière.
find . -regex '.*/f2/log_7'
Cela ne correspondra que si log_7 est directement imbriqué sous f2
Il existe une autre façon d'utiliser xargs pour la même chose
find . -name filename | xargs grep -e refectory
Mais trouver avec une expression régulière intégrée est préférable.
Cela échouerait si le modèle à rechercher est contenu (en tant que sous-chaîne) dans un nom de répertoire.
Simple glob devrait faire:
shopt -s globstar printf '%s\n' **/f2/log_7
S'il y a une possibilité pour plus de dossiers principaux, vous pouvez utiliser l'option globstar :
printf '%s\n' */f2/log_7
Utilisez peut-être une expression régulière, quelque chose comme
find. -regex '. * / f2 / log_7'. Cela ne correspondra que silog_7est directement imbriqué sousf2@artm vous pouvez essayer regex pour le nom quelque chose comme * / f2 / log_7
@tmcnicol sur place, souhaitez-vous convertir votre commentaire en réponse, l'acceptera.
@ tkhurana96 grâce à vous aussi; regex est la beauté;)
très appréciée
Cela ferait également:
find ./ke/f2/ -type f -name "log_7".