web-dev-qa-db-fra.com

Comment rechercher tous les sous-répertoires pour en trouver un avec un certain nom?

Disons que j'ai un répertoire de haut niveau appelé /dir et de nombreux sous-répertoires. Comment puis-je rechercher les sous-répertoires de /dir Pour trouver celui appelé x/x/dir/x/x/x/target?

Cette question est similaire à, mais pas exactement ce que je recherche: Trouvez la commande pour certains sous-répertoires .

Je ne cherche pas de fichiers, juste des annuaires avec un nom particulier.

12
bernie2436

Essayer find /dir -type d -name "your_dir_name".

Remplacer /dir Avec votre nom de répertoire et remplacez "your_dir_name" Avec le nom que vous recherchez.

-type d racontera find à rechercher des annuaires uniquement.

17
Vinz

Pour une solution plus générale de trouver un ou plusieurs répertoires et la recherche de quelque chose comme la recherche d'anciennes adresses électroniques dans les référentiels GIT, regardez le modèle suivant:

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e '[email protected]'
1
hildred
echo **/target

ou pour obtenir un match par ligne:

printf %s\\n **/target

Cela fonctionne hors de la boîte dans ZSH. En Bash, vous devez d'abord exécuter shopt -s globstar Premièrement, et attention à ce que cela traverse également des liens symboliques vers des répertoires. Dans ksh93, vous devez exécuter set -o globstar Premièrement.

Si vous souhaitez faire correspondre uniquement des répertoires ou des liens symboliques vers des répertoires, ajoutez une trailing / (C'est-à-dire **/target/). Dans ZSH, pour correspondre uniquement aux annuaires, mais pas de liens symboliques vers des répertoires, faites cette **/target(/).

Dans n'importe quel shell, vous pouvez utiliser la commande find:

find . -name target

Sur Linux et Cygwin, le . Est facultatif. Si vous souhaitez correspondre uniquement aux répertoires, ajoutez -type d.