Können wir durch die Handhabung des Dateisystems Binärdateien ohne Kopiervorgang zusammenführen?

Können wir durch die Handhabung des Dateisystems Binärdateien ohne Kopiervorgang zusammenführen?

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:

  1. Es ist langsam. Der IO-Zugriff ist langsam.
  2. 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,..., filenan das Ende von file1inplace 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.txttrennen 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

verwandte Informationen