Bash-Skript zum Durchlaufen von Ordnern und Auflisten von Dateien in Textform

Bash-Skript zum Durchlaufen von Ordnern und Auflisten von Dateien in Textform

Ich kann dies in Windows CMD-Skripten tun, aber jetzt gelange ich über Raspberry Pi zu Debian.

Ich möchte Folgendes tun ...

(Im aktuellen Ordner)

  • Für jeden Unterordner...
    • Erstellen Sie eine Datei mit dem Namen original_filenames.txt
    • Echo des Ordnernamens in dieser Datei original_filenames.txt
    • Listet alle Dateien (einschließlich aller Unterordner) in original_filenames.txt auf

Antwort1

Verwenden einer Shell-Schleife:

for dir in */; do
    { printf '%s\n' "$dir"
      ( cd "$dir" && find . )
    } >"$dir/original_filenames.txt"
done

Dies durchläuft alle Unterverzeichnisse im aktuellen Verzeichnis. Der Hauptteil der Schleife gibt den Namen des Verzeichnisses und dann rekursiv eine Liste aller Dateien und Verzeichnisse in diesem Verzeichnis aus. Diese Ausgabe geht an die original_filenames.txtDatei im Verzeichnis.

Kürzer:

for dir in */; do
    find "$dir" >"$dir/original_filenames.txt"
done

Dies führt zu einer leicht unterschiedlichen Ausgabe, da die in die Datei geschriebenen Pfadnamen alle mit dem Namen des Unterordners beginnen.

Wenn Sie nicht an Verzeichnisnamen interessiert sind und nur die Pfadnamen der normalen Dateien wünschen, verwenden Sie findmit -type fnach dem Verzeichnisnamen.


Beachten Sie, dass, wenn Sie planen,mitdie Generierung von Ausgabedateien für irgendetwas, dann wird dies fehlschlagen (oder zumindest sehr problematisch sein), wenn einer der gefundenen Pfadnamen Zeilenumbrüche enthält (was auf einem Unix-System durchaus möglich ist).

Antwort2

Sie können dies mit dem findBefehl und der execOption tun – ungefähr so:

find . -type d \( ! -name . \) -exec bash -c '
    dirname=$(basename "{}") && 
    cd "{}" && 
    echo "{}" > original_filenames.txt && 
    ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;

Hier ist ein StackOverflow-Beitrag, den Sie vielleicht nützlich finden:

verwandte Informationen