462 Stimmen

Verkettung mehrerer Textdateien in eine einzige Datei in Bash

Was ist der schnellste und pragmatischste Weg, um alle *.txt-Dateien in einem Verzeichnis zu einer großen Textdatei zusammenzufassen?

Derzeit verwende ich Windows mit cygwin, so dass ich Zugriff auf BASH habe.

Ein Windows-Shell-Befehl wäre auch schön, aber ich bezweifle, dass es einen solchen gibt.

20voto

jackfizee Punkte 199

Seien Sie vorsichtig, denn keine dieser Methoden funktioniert bei einer großen Anzahl von Dateien. Ich persönlich habe diese Zeile verwendet:

for i in $(ls | grep ".txt");do cat $i >> output.txt;done

EDIT: Wie jemand in den Kommentaren sagte, können Sie die $(ls | grep ".txt")$(ls *.txt)

EDIT: Dank des Fachwissens von @gnourf_gnourf ist die Verwendung von Globus ist der korrekte Weg, um über Dateien in einem Verzeichnis zu iterieren. Folglich sind blasphemische Ausdrücke wie $(ls | grep ".txt") muss ersetzt werden durch *.txt (siehe den Artikel aquí ).

Gute Lösung

for i in *.txt;do cat $i >> output.txt;done

8voto

ghostdog74 Punkte 305138

Der pragmatischste Weg mit der Shell ist der Befehl cat. Es gibt auch andere Möglichkeiten,

awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt

4voto

Ori Punkte 39
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]

Zum Beispiel:

type C:\*.txt > C:\1\all.txt

Das nimmt alle txt-Dateien im Ordner C:\ und speichert sie in C:\1 Ordner mit dem Namen all.txt

Oder

type [source folder]\* > [destination folder]\[file name].[File extension]

Zum Beispiel:

type C:\* > C:\1\all.txt

Das nimmt alle Dateien, die in dem Ordner vorhanden sind, und legt ihren Inhalt in C:\1\all.txt

2voto

Michael Hall Punkte 2093

Die am meisten hochgestuften Antworten werden nicht berücksichtigt, wenn die Dateiliste zu lang ist.

Eine besser tragbare Lösung wäre die Verwendung von fd

fd -e txt -d 1 -X awk 1 > combined.txt

-d 1 beschränkt die Suche auf das aktuelle Verzeichnis. Wenn Sie diese Option weglassen, werden rekursiv alle .txt Dateien aus dem aktuellen Verzeichnis.
-X (auch bekannt als --exec-batch ) führt einen Befehl aus ( awk 1 in diesem Fall) für alle Suchergebnisse auf einmal.

Anmerkung, fd ist kein "Standard"-Unix-Programm, daher müssen Sie wahrscheinlich installieren es

1voto

Michael-zhang Punkte 11

Das können Sie so machen: cat [directory_path]/**/*.[h,m] > test.txt

wenn Sie {} die Dateierweiterung der zu suchenden Dateien anzugeben, gibt es ein Problem mit der Reihenfolge.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X