Antworten:
ls *.txt | xargs cat >> all.txt
funktioniert möglicherweise etwas besser, da es an all.txt angehängt wird, anstatt es nach jeder Datei neu zu erstellen.
Übrigens cat *.txt >all.txtwürde auch funktionieren. :-)
Wenn einige Ihrer Dateinamen ', "oder Leerzeichen enthalten, xargsschlägt dies aufgrund des Trennzeichenproblems fehl
Laufen Sie im Allgemeinen niemals xargsohne -0, da es eines Tages zurückkommt und Sie beißt.
Erwägen Sie stattdessen die Verwendung von GNU Parallel:
ls *.txt | parallel cat > tmp/all.txt
oder wenn Sie es vorziehen:
ls *.txt | parallel cat >> tmp/all.txt
Weitere Informationen zu GNU Parallel finden Sie unter http://www.youtube.com/watch?v=OpaiGYxkSuQ
all.txt ist eine Datei im selben Verzeichnis, weshalb cat verwirrt ist, wenn sie von derselben Datei in dieselbe Datei schreiben möchte.
Auf der anderen Seite:
ls *.txt | xargs cat > tmp/all.txt
Dies liest aus Textdateien in Ihrem aktuellen Verzeichnis in die all.txt in einem Unterverzeichnis (nicht im Lieferumfang enthalten *.txt).
Sie könnten auch auf eine Begrenzung der Befehlszeilenlänge stoßen. Ein Grund für die Verwendung xargsist, dass die Eingabe in sichere, befehlszeilengroße Blöcke aufgeteilt wird. Stellen Sie sich also eine Situation vor, in der sich Hunderttausende von TXT-Dateien im Verzeichnis befinden. ls *.txtwird versagen. Sie müssten tun
ls | grep .txt$ |xargs cat > /some/other/path/all.txt
.txt$in diesem Fall ist ein regelmäßiger alles Ausdruck entspricht Enden in .txt (so ist es nicht genau wie *.txt, da , wenn Sie eine Datei mit dem Namen haben atxt, dann *.txtwäre es nicht passen, aber der reguläre Ausdruck würde.)
Die Verwendung eines anderen Pfads ist darauf zurückzuführen, dass all.txt, wie in anderen Antworten angegeben, mit dem Muster übereinstimmt, *.txtsodass ein Konflikt zwischen Eingabe und Ausgabe besteht.
Beachten Sie , dass Sie dies tun möchten , wenn Sie Dateien mit 'Namen haben (und dies könnte die Ursache des unmatched single quoteFehlers sein)
ls | grep --null .txt$ | xargs -0 cat > /some/other/path/all.txt
Die Option --null weist grep an, die Ausgabe getrennt durch ein \0(aka null) -Zeichen anstelle der Standard-Newline zu verwenden, und die -0Option `xargs weist es an, die Eingabe im gleichen Format zu erwarten. Dies würde auch dann funktionieren, wenn Sie Dateinamen mit Zeilenumbrüchen hätten.
lshierfür . Wenn Sie wirklich nicht verwenden können,cat *.txt >all.txtversuchen Sieprintf '%s\0' *.txt | xargs -r0 cat >allund dannmv all all.txt, um zu vermeiden, dass sich die Datei selbst referenziert.