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 statund bash, können Sie die Dateigröße mit erhalten:
stat -c %s your_file
Wenn Sie die letzten $amountBytes 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
-cOption 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.