So listen Sie Verzeichnisse und Ausgaben in Bash auf

So listen Sie Verzeichnisse und Ausgaben in Bash auf

Ich möchte eine Liste von Verzeichnissen in einem Ordner erfassen und die Liste in eine ausführbare Datei ausgeben, die sie zum Ausführen von etwas verwendet.

Im Wesentlichen erfordern diese Bash-Dateien eine Liste von Ordnern in meinem , die von , , , $directoryvariieren und manchmal bis zu 30 reichen. Alle Unterordner werden mit dem Symbol angehängt.@sub1@sub2@sub3@

Derzeit füge ich die Unterordner manuell zu meiner Liste hinzu und rufe sie mit auf , wobei „subs“ oben als … usw. -sub="$subs"definiert ist. subs="$directory/@sub1;$directory/@sub2;

Ich muss die gleiche Formatierung für die Ausgabe beibehalten, um der Art und Weise gerecht zu werden, wie die ausführbare Datei erstellt wird.

Wie kann ich das am besten automatisieren? Entschuldigen Sie, wenn das etwas seltsam klingt, aber das ist meine erste Frage hier.

Antwort1

Mögliche Lösung:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

Zunächst ein leerer Ordner, einige Ordner mit dem Namen @subX, eine Datei, die wir nicht wollen.

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

Mit können Sie Dinge finden und sie entweder auf Standardausgabe drucken, etwas damit ausführen und ähnliches find. Verwenden Sie dies, anstatt zu versuchen, die ls-Ausgabe zu analysieren.

Das erste Argument ist der zu durchsuchende Ordner (zB find .das aktuelle Verzeichnis)

-type dfiltert nur nach Verzeichnissen (keine Dateien)

-name '@*'jede Übereinstimmung, die mit einem @ beginnt

-print0Drucken Sie das Ergebnis auf der Standardausgabe. -print funktioniert auch, aber -print0 macht bei Leerzeichen usw. besondere Aktionen.

-maxdepth 1Unterordner nicht durchsuchen)

Ergebnis find . -type d -name '@*' -print0 -maxdepth 1im Setup von oben:

./@sub1./@sub2./@sub3

Beachten Sie, dass diese mit ./ beginnen, was für Sie möglicherweise ein Problem darstellt, möglicherweise aber auch nicht.

Ebenfalls lesenswert: die Option -exec von find und find ..... {} +;

verwandte Informationen