2016-10-21 5 views
1

Ich möchte einen Befehl für alle Dateien auf allen Ebenen im Verzeichnis ausführen. Es kann eine beliebige Anzahl von Dateien und Unterverzeichnissen enthalten. Auch diese Unterverzeichnisse können beliebig viele Dateien und Unterverzeichnisse enthalten. Ich möchte dies mit Shell-Skript tun. Da ich neu in diesem Bereich bin, kann mir jeder einen Ausweg vorschlagen.Schleife durch ein Verzeichnis mit beliebiger Tiefe

Antwort

0

können Sie einen rekursiven Befehl verwenden, die Wildcard-Zeichen verwendet werden (*) wie folgt:

for dir in ~/dev/myproject/*; do (cd "$dir" && git status); done 

Wenn Sie Befehle auf die einzelnen Dateien anwenden möchten, sollten Sie den Befehl Suchen verwenden und Ausführen von Befehlen auf es wie so :

find yourdirectory -type f -exec echo "File found: '{}'" \; 

Was das bedeutet:

  • findet alle Einträge in dem Verzeichnis yourdirectory
  • , die die Typ f haben - so sind eine Datei
  • betreibt ein exec auf jede Datei
0

Sie den Befehl "find" mit "xargs" nach „verwenden | "(Rohr).

Beispiel: Nehmen wir an, dass ich alle Dateien entfernen möchten, die „.txt“ Erweiterung auf ‚Dateien‘ haben:

find Documents -iname *.txt |xargs rm -f 

hilft?

+0

Was ist, wenn ich den Dateinamen in dem Befehl übergeben möchte ich auf allen Dateien ausführen möchte –

+0

Ich glaube, dass ich Ihnen die Antwort bereits gab! Xargs wird jeden gewünschten Befehl anwenden. Mit der Option "-iname " finden Sie den Dateinamen. Sie müssen nun ein Skript zum Erfassen von Argumenten einfügen. Sie können mit bash arbeiten und Argumente mit '$ 1, $ 2, ... $ n' Variablen erhalten. Bsp .: 'startsearch = $ 1' und' filename = $ 2' und sie verwenden den obigen Befehl mit $ startsearch und $ filename. Sie können dies selbst verbessern! –

+0

Vielen Dank –

0

Verwendung finden:

-type f -exec COMMAND finden {} \;

-f wendet den Befehl nur auf Dateien an, nicht auf Verzeichnisse. Der Befehl ist standardmäßig rekursiv.

+0

Beachten Sie, dass 'find -exec' wirklich langsam ist. 'finden | xargs' ist bei großen Dateimengen viel schneller. Und es kann auch parallel sein. –

Verwandte Themen