2
votes

rechercher récursivement, mais avec un nom de sous-dossier spécifique

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


6 commentaires

Utilisez peut-être une expression régulière, quelque chose comme find. -regex '. * / f2 / log_7' . Cela ne correspondra que si log_7 est directement imbriqué sous f2


@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" .


3 Réponses :


4
votes

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


0 commentaires

0
votes

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.


1 commentaires

Cela échouerait si le modèle à rechercher est contenu (en tant que sous-chaîne) dans un nom de répertoire.



0
votes

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


0 commentaires