
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.txt
Datei 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 find
mit -type f
nach 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 find
Befehl und der exec
Option 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: