Wie bekomme ich eine Liste von Verzeichnissen in bash und erweitere sie dann als Kommandozeilenparameter?

7

Ich schreibe ein Bash-Skript, das für einen Schritt eine Liste von Verzeichnissen (Variable) in einem Zielverzeichnis (das auch Dateien enthalten kann) erhält und sie dann als Parameter in ein Python-Skript ausdehnt.

Beispiel:

%Vor%

Und ich muss innerhalb eines Bash-Skripts aufrufen:

%Vor%

oder alternativ, Escape-Leerzeichen:

%Vor%

Ich brauche das Skript genau einmal für das Verzeichnis 'stuff'.

Gibt es einen einfachen Weg, um so etwas zu tun? Ich habe gegoogelt und das Beste, was ich herausgefunden habe, verlangt, dass ich weiß, wie viele Verzeichnisse es gibt.

    
Charles Randall 24.06.2011, 02:56
quelle

4 Antworten

13

Dies ist ein Job zum Suchen.

%Vor%

Wenn Sie -exec verwenden, werden die geschweiften Klammern {} durch die Namen der übereinstimmenden Dateien ersetzt, und + zeigt das Ende des Befehls an (für den Fall, dass Sie feststellen möchten, dass zusätzliche Aktionen ausgeführt werden sollen). Dies ist der ideale Weg, um einen Befehl mit find auszuführen, da er Dateinamen mit ungewöhnlichen Zeichen (z. B. Leerzeichen) korrekt behandelt.

find ist ziemlich flexibel, besonders wenn Sie die GNU-Version in der Regel mit Linux-Distributionen gebündelt haben.

%Vor%

Beachten Sie im zweiten Beispiel die vorsichtige Verwendung von xargs -0 und \n , um das NUL-Zeichen zum Abgrenzen von Dateinamen zu verwenden. Es mag seltsam erscheinen, aber das erlaubt es dem Befehl, auch dann zu arbeiten, wenn Sie etwas wirklich Seltsames tun, wie zum Beispiel Newline %code% in Ihren Verzeichnisnamen.

Alternativ können Sie auch nur Shell-Builtins verwenden. Ich empfehle das nicht, aber für pädagogischen Wert, hier ist wie:

%Vor%     
John Kugelman 24.06.2011, 03:01
quelle
3

Eine einfachere Lösung, die keinen neuen Prozess erzeugt (wie dies der Fall ist) ist:

%Vor%     
drwho 10.11.2013 07:05
quelle
2

Sie können den Befehl finden verwenden und angeben, dass die Verzeichnisse nur mit -type d gedruckt werden sollen. Ihr Befehl wird wie folgt aussehen:

%Vor%

Wenn Sie sich Sorgen um Leerzeichen und andere Sonderzeichen machen, können Sie dies tun:

%Vor%     
Corey Henderson 24.06.2011 03:01
quelle
1
%Vor%

Dies findet alle Verzeichnisse unter / stuff, aber nicht rekursiv und übergibt sie an script.py und stellt sicher, dass sie auch dann korrekt übergeben werden, wenn die Verzeichnisnamen Leerzeichen enthalten.

    
Steve Prentice 24.06.2011 03:21
quelle

Tags und Links