GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Teilen und Zusammenführen – Mit DVDs!?

Angenommen, ich habe eine große Datei namens foo.tar.xz .
Ich habe die Datei mit split -b 4689887232 foo.tar.xz foo.tar.xz. in Teile von jeweils knapp 4,7 GB aufgeteilt , was mir Dateien mit dem Namen foo.tar.xz.aa gibt , foo.tar.xz.ab , etc.
Dann schreibe ich jede Datei auf eine andere DVD und schicke sie mit einer ziemlich großen Brieftaube an Alice.

Jetzt könnte Alice jede DVD einlegen, jede Datei auf ihren PC kopieren und dann cat verwenden und xz um den Inhalt von foo zu erhalten :cat foo.tar.xz.* | tar xfJ -

Nehmen wir nun an, dass Alice gerade genug Speicherplatz auf ihrem PC hat, um den extrahierten Inhalt von foo zu speichern . Gibt es eine Art cat die diese Dateien direkt von DVDs liest und den Stream pausiert, damit ihr die nächste DVD einlegen könnt? Etwas wie pausecat oder volumecat ?

Akzeptierte Antwort:

Ich kenne keine solche cat Geschmack, aber hier ist eine Lösung, die fast funktioniert:

  1. Führen Sie in einem Terminal mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Legen Sie die erste DVD in das DVD-ROM-Laufwerk ein (z. B. dev/sr0).
  3. Führen Sie in einem zweiten Terminal dd if=/dev/sr0 of=myfifo aus
  4. Wenn dd entfernen Sie die DVD.
  5. Wenn Sie eine andere DVD haben, legen Sie sie in das DVD-ROM-Laufwerk ein und fahren Sie mit Schritt 3 fort, andernfalls fahren Sie mit Schritt 6 fort.
  6. Drücken Sie im ersten Terminal STRG-C, um tail zu beenden und tar .

Wie es funktioniert

Der Trick besteht darin, tail zu verwenden um kontinuierlich aus einer benannten Pipe zu lesen. Die Ausgabe von tail wird dann an den Befehl weitergeleitet, den Sie ausführen möchten. Anfangs ist das Rohr ungeöffnet, also passiert nichts. Aber wenn Sie mit dd beginnen, Daten in die Pipe zu pumpen , tail holt es ab und leitet es an Ihren Befehl weiter.

Die Magie passiert, wenn der Datenfluss zur Pipe stoppt:tail hält seinen standardmäßigen out-Dateideskriptor offen, was dazu führt, dass Ihr Befehl angehalten wird. In der Zwischenzeit tail wartet einfach auf weitere Eingaben.

Das Problem

Der Grund, warum ich sagte, dass es fast funktioniert, ist, dass es anscheinend ein Pufferproblem gibt, das tail verursacht nicht das letzte Datenbit zu schreiben, das darin eingespeist wird. Ich hoffe, dass jemand den Einblick geben kann, um dies anzugehen.

Verwandte:Ein Zeichenfolgenfeld in jq in ein Array aufteilen?
Linux
  1. Trimmen mit Lvm und Dm-Crypt?

  2. Laufendes Skript mit „. “ Und mit „Quelle“?

  3. Dateien finden und taren (mit Leerzeichen)

  4. Verwendung von find und tar mit Dateien mit Sonderzeichen im Namen

  5. Verbinden Sie Videos mit geteiltem Bildschirm

So laden und extrahieren Sie Tar-Dateien mit einem Befehl

Tar Vs Zip Vs Gz:Unterschied und Effizienz

PDF Split and Merge „PDFSAM“ macht genau das, was es verspricht

Erste Schritte mit dem Tar-Befehl

Installation und erste Schritte mit Git

Linux-Split-Befehl mit Beispielen