#!/bin/bash while read mydir; do echo "$:" >> output.txt cat $mydir/*.txt >> output.txt done < <(find test* -type d )
Dies durchläuft alle Verzeichnisse innerhalb directory1
und macht genau das, was Sie wollen. Bitte beachten Sie, dass Sie dieses Skript innerhalb von ausführen müssen directory1
.
Einige Erklärungen:
Zunächst find test* -type d
läuft die pro Zeile jedes Unterverzeichnis Namen druckt. Diese Ausgabe wird dann für die read mydir
Ausführung aller Elemente innerhalb der while
Schleife einmal für jede Zeile eingespeist ( $mydir
wird jeder Zeile zugewiesen (alias Name des Unterverzeichnisses)).
Dann wird die erste Zeile in der Schleife schreibt den Verzeichnisnamen mit einem Doppelpunkt in output.txt
, mit >>
was bedeutet, „anhängen zu einer Datei“ (wenn die Datei nicht existiert, wird sie erstellt).
Die zweite Zeile innerhalb der Schleife schreibt den Inhalt jeder *.txt
Datei innerhalb des Unterverzeichnisses output.txt
in "Append-Modus".
Mein Test-Setup (mit dem obigen Skript als createfile.sh
):
$ ls * test1: fileA.txt test2: fileB.txt test3: fileC.txt $ bash createfile.sh $ cat output.txt test1: file content from dir1 test2: test content from dir2 test3: test content from dir3