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.

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.


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 'my.old@email.address'

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.