Mit cat
Ausgabeumleitung verwenden. Syntax: cat file [file] [[file] ...] > joined-file
.
Beispiel mit nur zwei Dateien (Sie können viel mehr haben):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
Wenn Sie "viele Dokumente" haben, verwenden Sie Shell Globbing (Muster):
cat input-files-dir/* > joined-file
Dadurch werden alle Dateien in diesem Verzeichnis mit dem aktuellen Verzeichnis verknüpft (wodurch verhindert wird, dass sie mit der Ausgabedatei selbst übereinstimmen). Es ist völlig unabhängig von der Verwendung cat
und Ausgabeumleitung - es ist nur Bash, das alle Dateien als Argumente für bereitstellt cat
.
Datentypen
Es werden nur Dateien zusammengeklebt (verbunden), wie Sie es mit Papier und Klebeband tun würden. Es ist ihm egal, ob das tatsächliche Dateiformat dies verarbeiten kann. Es wird für Textdateien funktionieren, aber nicht für PDFs, ODTs usw. Nun, es wird sie zusammenkleben, aber es ist kein gültiges PDF / ODT mehr.
Reihenfolge des Beitritts
Wie Phoibos betonte, führt das Verschieben der Shell zu einer alphabetischen Reihenfolge der Dateinamen. So funktioniert Bash and Shell Globbing.
Nachtrag zum input file is output file
Fehler
Wenn das Muster der Eingabedateien mit der gleichen Datei übereinstimmt, die ausgegeben wird, wird ein Fehler verursacht. Es ist ein Sicherheitsmerkmal. Beispiel: Beim cat *.txt > out.txt
zweiten Start wird dies verursacht.
Was Sie dagegen tun können:
- Wählen Sie ein spezifischeres Muster, das mit den tatsächlichen Eingabedateien übereinstimmt und nicht mit dem Ausgabenamen übereinstimmt. Beispiel: Das Muster der Eingabedateien
*.txt
mit der Ausgabedatei output.out
kollidiert nicht.
- Arbeite in verschiedenen Verzeichnissen. Im obigen Beispiel habe ich ein separates
input-files-dir
Verzeichnis verwendet, um alle Dateien in dem aktuellen Arbeitsverzeichnis abzulegen und auszugeben. Dies macht es unmöglich, diesen Fehler zu erhalten.
ls
nur die Übereinstimmungen auflisten. ZB umls *.txt
zu sehen, was passt.Eine einfache Möglichkeit, dies zu tun, ist die Verwendung von cat:
Wenn Sie nur ausgeben
cat file1 file2
, werden beide Dateien in der Standardausgabe angezeigt. Mit>
leiten Sie einfach die Standardausgabe in eine Datei um. Das geht auch mit anderen Befehlen.quelle
Mach es mit einer einfachen Schleife:
>>
hängt an die Datei an.Hinweis: Wenn Sie den Befehl aus irgendeinem Grund erneut ausführen müssen, müssen Sie ihn entfernen
complete.txt
, andernfalls würden Sie die Datei in sich selbst schreiben, was nicht funktioniert.quelle
cat
.cat *.txt
. Die for-Schleife sollte sortiert sein.for
in Bash oder anderswo verwenden.Wenn die Dateien, die Sie kombinieren möchten, alle in enden
.txt
, halten Sie es einfach:Wenn das Verzeichnis nur Textdateien enthält, ist es auch einfach:
(Beachten Sie
combined.txt
, dass eine erneute Erstellung in die Erweiterung von*
einbezogen wird, was zu ungewöhnlichem Verhalten führt.)Wenn Sie einige Dateien im Verzeichnis auswählen möchten und nicht andere, ist es am besten, wenn Sie anhand der Dateinamen unterscheiden können, welche Sie möchten. Wenn nicht, können Sie Lust bekommen mit
find
. Aber ich bezweifle, dass Sie so weit gehen müssen.quelle
Das von cipricus geschriebene Thunar-Skript für benutzerdefinierte Aktionen hat mich auch dazu inspiriert, ein ähnliches Nautilus-Skript zu schreiben . Hier ist es also:
quelle
Dies ist eine Ergänzung und eine Abwandlung der anderen Antworten, die sich darauf beziehen, diese Lösungen in die Handlungen von Thunar einfließen zu lassen.
Nicht alle von ihnen sind auf diese Weise verwendbar, aber einige sind es.
Ich fand es am interessantesten, ausgewählte Dateien aus Thunars Kontextmenü zusammenführen zu können .
Dies ist eine Variation von dem, was durch vorgeschlagen wurde Sadi in einem Kommentar gertvdijk ‚s Antwort :
Nur ausgewählte Dateien werden verbunden. Beschränken Sie die Darstellungsbedingungen auf Textdateien.
Besonderer Dank geht an Sadi, deren Kommentar mir die klarste und aktuellste Lösung für mein Problem lieferte.
Ich habe die Antwort von gertvdijk als endgültig akzeptiert . Dies war nicht nur die Gelegenheit für Sadi, sondern scheint auch für andere von weiterem Wert zu sein, da es eine gut durchdachte und vollständige Lösung bietet (wenn auch etwas über meinen CLI-Lesefähigkeiten).
quelle
Sie könnten auch versuchen,
find
Befehl,Es findet
.txt
Dateien im aktuellen Verzeichnis und führt dencat
Befehl für jede gefundene Datei aus. Schließlich wurde die gesamte Ausgabe in den Dateinamen umgeleitetfile
(der direkt im aktuellen Dateinamen erstellt wurde).Erläuterung:
quelle
Sie können auch einfach ein Online-Dienstprogramm wie merge-files-online.com verwenden
quelle