Comment puis-je rechercher récursivement des noms de répertoire avec une chaîne particulière où la chaîne ne représente qu'une partie du nom du répertoire

73

Comment puis-je rechercher de manière récursive des noms de répertoire avec une chaîne particulière où la chaîne n'est qu'une partie du nom du répertoire?

Par exemple: le nom du répertoire est "8.0.3-99966_en", mais je souhaite rechercher de manière récursive des répertoires avec la chaîne "99966".

Bob Perez
la source

Réponses:

95

Vous pouvez utiliser la findcommande:

find YOUR_STARTING_DIRECTORY -type d -name "*99966*" -print

Exemple:

find ~ -type d -name "*99966*" -print

devrait trouver tous les répertoires ( -type d) à partir de votre répertoire personnel ( ~) dont le nom contient la chaîne "99966" ( -name "*99966*") et les afficher ( -print).

lgarzo
la source
Comment puis-je exclure un certain répertoire de la recherche? J'ai besoin de chercher / mais j'obtiens des tonnes de / proc résultats dont je me moque.
Kozuch
@Kuzuch (après un certain temps!): Vous pouvez utiliser un grep négatif pour rediriger la recherche sinf dans une recommandation telle que: find <what>> | grep -v "/ proc" qui filtrera toutes les lignes contenant la chaîne de recherche.
Juan Lanus
19

Pour éviter tous les résultats "Autorisation refusée", vous pouvez utiliser:

find / -type d -name "*99966*" -print 2>/dev/null

Voir cet article sur le périphérique null et celui-ci sur les flux standard pour plus d'informations.

Dan Fletcher
la source
travaille pour moi :) ~
smatthewenglish
9

Vous pouvez diriger la sortie vers grepl'avoir sélectionner le nom du répertoire
Quelque chose comme

find / -type d | grep "directory name"

La /indique pour rechercher l'ordinateur entier

Collin
la source
@ Zanna vous avez raison, j'ai modifié la réponse. Merci de l'avoir signalé
Collin
3

Un moyen facile de faire cela est d'utiliser find | egrep string. S'il y a trop de résultats, utilisez le -type ddrapeau pour rechercher. Exécutez la commande au début de l'arborescence de répertoires dans laquelle vous souhaitez effectuer la recherche, ou vous devrez également fournir le répertoire comme argument find.

Une autre façon de faire est d'utiliser ls -laR | egrep ^d.

Et la locatecommande est également utile:locate string

Belacqua
la source