Wie durchsuche ich alle Unterverzeichnisse, um eines mit einem bestimmten Namen zu finden?

12

Angenommen, ich habe ein Verzeichnis der obersten Ebene mit dem Namen /dirund viele Unterverzeichnisse. Wie durchsuche ich die Unterverzeichnisse von /dir, um das aufgerufene zu finden x/x/dir/x/x/x/target?

Diese Frage ist ähnlich, aber nicht genau das, wonach ich suche: Befehl find für bestimmte Unterverzeichnisse .

Ich suche keine Dateien, nur Verzeichnisse mit einem bestimmten Namen.

bernie2436
quelle

Antworten:

17

Versuchen Sie es find /dir -type d -name "your_dir_name".

Ersetzen Sie /dirdurch Ihren Verzeichnisnamen und ersetzen "your_dir_name"Sie ihn durch den gesuchten Namen.

-type dwird sagen find, nur nach Verzeichnissen zu suchen.

Vinz
quelle
1

Eine allgemeinere Lösung zum Auffinden eines oder mehrerer Verzeichnisse und zum Durchsuchen dieser Verzeichnisse nach alten E-Mail-Adressen in Git-Repositorys finden Sie im folgenden Muster:

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

oder um eine Übereinstimmung pro Zeile zu erhalten:

printf %s\\n **/target

Dies funktioniert sofort in zsh. In bash müssen Sie shopt -s globstarzuerst ausführen und darauf achten, dass dadurch auch symbolische Links zu Verzeichnissen durchlaufen werden. In ksh93 müssen Sie set -o globstarzuerst ausführen .

Wenn Sie nur Verzeichnisse oder symbolische Links mit Verzeichnissen abgleichen möchten, fügen Sie ein nachfolgendes /(dh **/target/) hinzu. Um in zsh nur Verzeichnisse, aber keine symbolischen Links zu Verzeichnissen abzugleichen, machen Sie das **/target(/).

In jeder Shell können Sie den folgenden findBefehl verwenden:

find . -name target

Unter Linux und Cygwin ist das .optional. Wenn Sie nur Verzeichnisse abgleichen möchten, fügen Sie hinzu -type d.

Gilles 'SO - hör auf böse zu sein'
quelle