
Ich möchte Binärdateien effizient mit einem Shell-Befehl zusammenführen und habe schnell klassische Möglichkeiten wie diese gefunden:
cat file1 file2 > file3
Nicht schlecht, aber:
- Es ist langsam. Der IO-Zugriff ist langsam.
- Es braucht zusätzlichen Speicherplatz. Ich möchte die Dateien nicht kopieren. Einfach aneinanderfügen.
Dateisysteme eignen sich hervorragend zum Umgang mit Dateifragmentierung. Können wir Dateien nicht einfach mit diesem Mechanismus zusammenführen?
Antwort1
Du kannst das:
cat file2 file3 [...] filen >> file1
Dies wird file2
, file3
,..., filen
an das Ende von file1
inplace anhängen. Der >>
Operator weist die Shell an, in dasEnde der Datei.
Sie möchten das Dateisystem nutzen, um „Dateifragmentierung zu handhaben“. Leider gibt es dafür keine allgemeine Methode. Das liegt daran, dass „Dateisysteme“ viel allgemeiner sind als Dateisysteme auf Festplatten – Sie haben beispielsweiseNFS,SICHERUNGund viele andere Mechanismen, mit denen Sie jede Art von Ressource verfügbar machen können (nicht nurGeräte blockierenwie Festplatten) als Dateisystemhierarchie. Selbst für blockgerätebasierte Dateisysteme gibt es dafür keinen Standardmechanismus und ich kenne auch keinen implementierungsspezifischen.
Antwort2
Ordnen Sie Ihre Dateinamen in einer Textdatei namens „Datei“ und list.txt
trennen Sie sie durch neue Zeilen. Führen Sie dann Folgendes in Bash aus:
while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt
Dadurch wird die verknüpfte Datei „out“ im aktuellen Verzeichnis erstellt.
Antwort3
dd if=firstfile.raw > completedfile.raw
dd if=nfile.raw >> completedfile.raw
dd if=lastfile.raw >> completedfile.raw