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.
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
und xargs -0
\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%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%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.
Tags und Links bash command-line-arguments