Antworten:
Dadurch wird die Ausgabe an all.txt angehängt
cat *.txt >> all.txt
Dies überschreibt all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Denken Sie daran, dass die Shell bei allen bisher angegebenen Lösungen die Reihenfolge festlegt, in der die Dateien verkettet werden. Für Bash, IIRC, ist das eine alphabetische Reihenfolge. Wenn die Reihenfolge wichtig ist, sollten Sie die Dateien entweder entsprechend benennen (01file.txt, 02file.txt usw.) oder jede Datei in der Reihenfolge angeben, in der sie verkettet werden soll.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Der Windows-Shell-Befehl type
kann dies tun:
type *.txt >outputfile
Der type
Befehl type schreibt auch Dateinamen in stderr, die nicht vom >
Umleitungsoperator erfasst werden (sondern auf der Konsole angezeigt werden).
Sie können die Windows-Shell verwenden, copy
um Dateien zu verketten.
C:\> copy *.txt outputfile
Aus der Hilfe:
Geben Sie zum Anhängen von Dateien eine einzelne Datei als Ziel an, jedoch mehrere Dateien als Quelle (mit Platzhaltern oder im Format Datei1 + Datei2 + Datei3).
Seien Sie vorsichtig, da keine dieser Methoden mit einer großen Anzahl von Dateien funktioniert. Persönlich habe ich diese Zeile verwendet:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Als jemand in den Kommentaren gesagt, können Sie ersetzen $(ls | grep ".txt")
mit$(ls *.txt)
BEARBEITEN: Dank der Erfahrung von @gnourf_gnourf ist die Verwendung von glob die richtige Methode, um Dateien in einem Verzeichnis zu durchlaufen . Folglich müssen blasphemische Ausdrücke wie $(ls | grep ".txt")
durch ersetzt werden *.txt
(siehe Artikel hier ).
Gute Lösung
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
es sich um ein ernsthaft schlechtes Antimuster handelt).
ls *.txt
scheitern, wenn zu viele Dateien vorhanden sind (Argumentliste zu langer Fehler)?
Der pragmatischste Weg mit der Shell ist der Befehl cat. andere Möglichkeiten umfassen,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
Methode die letzte und die erste Zeile benachbarter Dateien verkettet.
Wie wäre es mit diesem Ansatz?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
dem find
Befehl hinzufügen .
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
Beispielsweise:
type C:\*.txt > C:\1\all.txt
Das nimmt alle txt-Dateien im Ordner C: \ und speichert sie im Ordner C: \ 1 unter dem Namen all.txt
Oder
type [source folder]\* > [destination folder]\[file name].[File extension]
Beispielsweise:
type C:\* > C:\1\all.txt
Dadurch werden alle im Ordner vorhandenen Dateien übernommen und der Inhalt in C: \ 1 \ all.txt abgelegt
Sie können dies tun:
cat [directory_path]/**/*.[h,m] > test.txt
Wenn Sie {}
die Erweiterung der Dateien verwenden, die Sie suchen möchten, liegt ein Sequenzierungsproblem vor.
Wenn Sie auf ein Problem stoßen, bei dem all.txt in all.txt umgewandelt wird, können Sie versuchen, zu überprüfen, ob all.txt vorhanden ist oder nicht, falls vorhanden, entfernen Sie es
So was:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
Befehl überschreibt all.txt, falls vorhanden, >>
fügt Daten zu vorhandener Datei hinzu
das alles ist böse ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
einfaches Zeug.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;