Es gibt wahrscheinlich einen einfachen Trick, um dies zu tun, aber ich kann nicht aus der Manpage herausfinden.
Wie schneide ich die letzten 1 MB aus einer Datei mit einer unbestimmten Größe, zum Beispiel mit dd
?
Es gibt wahrscheinlich einen einfachen Trick, um dies zu tun, aber ich kann nicht aus der Manpage herausfinden.
Wie schneide ich die letzten 1 MB aus einer Datei mit einer unbestimmten Größe, zum Beispiel mit dd
?
Antworten:
Nun, vorausgesetzt, Sie haben stat
und bash
, können Sie die Dateigröße mit erhalten:
stat -c %s your_file
Wenn Sie die letzten $amount
Bytes für diese Datei mit extrahieren möchten dd
, können Sie:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Aber der vernünftigere Ansatz wäre tail
:
tail -c $(( 1024*1024 )) your_file > target_file
-c
Option für head
?
dd --help Verwendung: dd [OPERAND] ... oder: dd OPTION Kopieren Sie eine Datei, konvertieren und formatieren Sie sie entsprechend den Operanden. bs = BYTES Lesen und Schreiben von BYTES-Bytes gleichzeitig (siehe auch ibs =, obs =) cbs = BYTES konvertiert BYTES-Bytes gleichzeitig conv = CONVS konvertiert die Datei gemäß der durch Kommas getrennten Symbolliste count = BLOCKS kopiert nur die BLOCKS-Eingabeblöcke ibs = BYTES liest BYTES-Bytes gleichzeitig (Standard: 512) if = FILE liest aus FILE statt aus stdin iflag = FLAGS laut kommagetrennter Symbolliste obs = BYTES schreibt BYTES Bytes gleichzeitig (Standard: 512) of = FILE schreibe nach FILE anstatt nach stdout oflag = FLAGS schreiben gemäß der durch Kommas getrennten Symbolliste seek = BLOCKS überspringt BLOCKS-Blöcke in Übergröße zu Beginn der Ausgabe überspringen = BLÖCKE überspringen BLÖCKE Blöcke der Größe ibs zu Beginn der Eingabe status = noxfer unterdrücke Übertragungsstatistik Auf BLOCKS und BYTES können die folgenden multiplikativen Suffixe folgen: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 · 1000, M = 1024 · 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024 usw. für T, P, E, Z, Y.
Wenn die Dateigröße genau 10 MB beträgt, 1024 * 10 10240 KB, verbleiben die letzten 1024 KB. Sie sollten die Blockgröße angeben, mit der Sie arbeiten, indem Sie die Optionen ibs und obs verwenden.
1M = 1024K
1024*9 = 9216
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M
Sie können auch die ersten 1 MB einer Datei überspringen, indem Sie die Option zum Überspringen verwenden, um zum Ende der Datei zu gelangen und die ersten 1 MB zu überspringen.
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Mit der Suchoption können Sie eine an eine bestimmte Stelle in Ihrer Ausgabedatei schreiben. Angenommen, Sie möchten die ersten 1 MB behalten und die letzten 8 MB überschreiben.
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Möglicherweise müssen Sie einige Details zu Ihrer Dateigröße abrufen, um sicherzustellen, dass Sie die richtige Datenmenge ein- und ausgeben.
ls -s --block-size 1K ./my/10MB/file
Mann ls --block-size = GRÖSSE Verwenden Sie SIZE-Byte-Blöcke. Siehe Format GRÖSSE unten -s, --size Gibt die zugewiesene Größe jeder Datei in Blöcken aus GRÖSSE kann eine der folgenden sein (oder kann eine ganze Zahl sein, auf die optional folgt): unten: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024 usw. für G, T, P, E, Z, Y.