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

13

Disons que j'ai un répertoire de premier niveau appelé /diret de nombreux sous-répertoires. Comment rechercher dans les sous-répertoires de /dirpour trouver celui appelé x/x/dir/x/x/x/target?

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

Je ne recherche pas de fichiers, juste des répertoires avec un nom particulier.

bernie2436
la source

Réponses:

18

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

Remplacez-le /dirpar le nom de votre répertoire et remplacez-le "your_dir_name"par le nom que vous recherchez.

-type ddira findde rechercher uniquement les répertoires.

Vinz
la source
1

Pour une solution plus générale de recherche d'un ou de plusieurs répertoires et de recherche de quelque chose comme la recherche d'anciennes adresses e-mail 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]'
hildred
la source
1
echo **/target

ou pour obtenir une correspondance par ligne:

printf %s\\n **/target

Cela fonctionne hors de la boîte dans zsh. En bash, vous devez d' shopt -s globstarabord exécuter , et sachez que cela traverse également des liens symboliques vers des répertoires. Dans ksh93, vous devez d' set -o globstarabord exécuter .

Si vous ne souhaitez faire correspondre que des répertoires ou des liens symboliques à des répertoires, ajoutez une fin /(c'est-à-dire **/target/). Dans zsh, pour faire correspondre uniquement les répertoires mais pas les liens symboliques vers les répertoires, faites cela **/target(/).

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

find . -name target

Sous Linux et Cygwin, le .est facultatif. Si vous souhaitez faire correspondre uniquement les répertoires, ajoutez -type d.

Gilles 'SO- arrête d'être méchant'
la source