Teilen Sie die Binärdatei schnell auf

822
ericg

Die Datei, die ich aufteilen muss, ist 32 GB.

Ich muss die Datei in einem von mir angegebenen Offset in zwei Teile aufteilen, und ich muss nur den zweiten Teil behalten.

Ich kann das leicht durch:

dd if=binary_file.bin of=second_part.bin bs=1 skip=143254 

Dies dauert jedoch sehr lange (Stunden) und ich benötige eine Befehlszeilenmethode, die den Prozess viel schneller abschließen wird.

Irgendwelche Vorschläge?

Ich verwende OS X 10.11.6 (El Capitan).

0
Benötigen Sie wirklich "bs = 1"? Das bedeutet, dass Byte für Byte gelesen wird, was extrem langsam ist. Hennes vor 8 Jahren 1
Ja, ich weiß, dass es wirklich sehr langsam ist. Wenn ich den Versatz von 143253 verwenden muss, was würden Sie vorschlagen? ericg vor 8 Jahren 0
Wie auch immer die Antwort ist. Bs = 1 für die gesamte Datei wird immer unnötig langsam sein. Es ist, als würde man einen Buchbrief für Brief kopieren. Schreiben Sie wie in einem Brief einen Buchstaben. Normalerweise würden Sie einen Satz lesen und diesen dann kopieren. Deshalb wollen wir es zum größten Teil der Datei tun. Jetzt müssen wir nur noch herausfinden, wie wir den komischen Versatz umgehen können. Hennes vor 8 Jahren 0

1 Antwort auf die Frage

0
Hennes

Vielleicht ein paar Bytes bis zu einer 4k-Grenze lesen und dann einen zweiten Befehl, um den Rest anzufügen?

Angenommen, wir wollen an einer 4K-Grenze enden (die meisten Dateisysteme scheinen 4K-interne Puffer zu verwenden).

  1. Fahren Sie mit dem Teil fort, an dem Sie mit dem Lesen beginnen möchten. (bs = 1 überspringen = 143254)
  2. Lesen Sie von 143254 bis 143254 mit bs = 1 und count = 3990
  3. Lesen Sie den Rest der Datei mit bs = 4k und hängen Sie sie an die Ausgabedatei an. (Sehen Sie hier, wie Sie Daten in einer Datei von dd an eine SU anhängen. )

Wenn dies zu langsam ist und Sie dies als sich wiederholende Aufgabe skripten, können Sie sogar noch weiter optimieren, indem Sie 512b Lesevorgänge für die ersten 3584 Bytes (7 * 512) ausführen. Dann lesen 400-Bit-Einzelbytes und der Rest die Größe 4k.

Beachten Sie, dass sich diese Antwort als Problemumgehung anfühlt. Ich werde die anderen Antworten, die diese Frage ansprechen wird, gerne lesen. Vielleicht sogar eine saubere Lösung, die nur nach 143254 sucht und dann zum Kopieren normale Lese- / Schreiboperationen verwendet, wodurch die Standardeinstellungen des Dateisystems verwendet werden können, anstatt meine expliziten Annahmen über interne 4-K-Puffer.