Dies erreichen Sie mit dem Befehl cat und der Dateinamenerweiterung . Wenn sich alle diese Dateien im Quellverzeichnis /path/to/directory
befinden und sich keine anderen Dateien in diesem Verzeichnis befinden, ist der prägnanteste Befehl der folgende:
cat /path/to/directory/*/*.txt > master.txt
Dadurch wird eine Datei erstellt, die master.txt
in Ihrem aktuellen Verzeichnis aufgerufen wird und den verketteten Inhalt aller Dateien im Quellverzeichnis enthält. HINWEIS: Dies schließt alle Dateien in einem der Unterverzeichnisse des Quellverzeichnisses ein.
Wenn das Verzeichnis andere Dateien enthält (oder wenn Sie nur ein bisschen genauer sein möchten), können Sie stattdessen den folgenden Befehl verwenden:
cat /path/to/directory/[a-z]/[a-z].txt > master.txt
Dies entspricht nur den folgenden Dateien im Quellverzeichnis:
a/a.txt
a/b.txt
a/c.txt
.
.
.
z/x.txt
z/y.txt
z/z.txt
Wenn sich andere Dateien im Quellverzeichnis befinden oder wenn Sie Dateien haben, die denen ähneln, bei a/z.txt
denen der Name des Unterverzeichnisses nicht mit dem Basisnamen der Datei übereinstimmt, und wenn Sie diese Dateien ausschließen möchten, müssen Sie verwenden Ein genauerer Befehl, um die Liste der gefundenen Dateien einzugrenzen. In diesem Fall könnten Sie eine Klammererweiterung und eine for-Schleife verwenden :
for letter in {a..z}; do \
cat "/path/to/directory/${letter}/${letter}.txt"; \
done >> master.txt
Dies entspricht genau den Dateien, die Sie in Ihrer Frage angegeben haben, und keinen anderen Dateien.
ls
in dieser Situation zu analysieren , da Globbing / Dateinamenerweiterung genauso gut funktionieren wird. Das Parsen der Ausgabe vonls
wird im Allgemeinen als schlechte Praxis angesehen. Weitere Informationen zu diesem Thema finden Sie unter Warum Sie die Ausgabe von ls nicht analysieren sollten .