Mungkin ada trik sederhana untuk melakukan ini, tetapi saya tidak dapat menemukan dari halaman manual.
Bagaimana cara saya memotong 1MB terakhir dari file dengan ukuran yang tidak ditentukan misalnya, dengan menggunakan dd
?
Mungkin ada trik sederhana untuk melakukan ini, tetapi saya tidak dapat menemukan dari halaman manual.
Bagaimana cara saya memotong 1MB terakhir dari file dengan ukuran yang tidak ditentukan misalnya, dengan menggunakan dd
?
Jawaban:
Nah, anggap Anda sudah stat
dan bash
, Anda bisa mendapatkan ukuran file dengan:
stat -c %s your_file
Jika Anda ingin mengekstrak $amount
byte terakhir untuk file itu dd
, Anda bisa:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Tetapi pendekatan yang lebih waras adalah menggunakan tail
:
tail -c $(( 1024*1024 )) your_file > target_file
-c
opsi untuk head
?
dd --help Penggunaan: dd [operan] ... atau: dd OPSI Menyalin file, mengonversi, dan memformat sesuai dengan operan. bs = BYTES membaca dan menulis byte BYTES pada satu waktu (juga lihat ibs =, obs =) cbs = BYTES mengonversi byte BYTES pada satu waktu conv = CONVS mengonversi file sesuai daftar simbol yang dipisahkan koma count = BLOCKS hanya menyalin blok input BLOCKS ibs = BYTES membaca byte BYTES pada suatu waktu (default: 512) if = FILE baca dari FILE daripada stdin iflag = FLAGS dibaca sesuai daftar simbol yang dipisahkan koma obs = BYTES menulis byte BYTES pada suatu waktu (default: 512) dari = FILE tulis ke FILE bukan stdout oflag = BENDERA tulis sesuai daftar simbol yang dipisahkan koma seek = BLOCKS melewati BLOCKS blok berukuran obs pada awal output skip = BLOCKS skip BLOCKS blok berukuran ibs pada awal input status = noxfer menekan statistik transfer BLOK dan BANTUAN dapat diikuti oleh sufiks multiplikatif berikut: 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, dan seterusnya untuk T, P, E, Z, Y.
Jika ukuran file tepat 10MB, 1024 * 10 10240K Ini akan meninggalkan 1024K terakhir. Anda harus menentukan ukuran blok yang Anda gunakan dengan menggunakan opsi ibs dan obs.
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
Anda juga dapat melewati 1MB file pertama, menggunakan opsi lewati untuk membaca hingga akhir file melompati 1MB pertama.
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Dengan menggunakan opsi pencarian, Anda dapat menulis a ke tempat tertentu di file output Anda. Katakanlah Anda ingin menyimpan 1MB pertama dan lebih dari menulis 8MB terakhir.
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Anda mungkin perlu mendapatkan beberapa detail tentang ukuran file Anda untuk memastikan Anda mendapatkan jumlah data yang masuk dan keluar yang tepat.
ls -s --block-size 1K ./my/10MB/file
man ls --block-size = SIZE gunakan blok SIZE-byte. Lihat format SIZE di bawah ini -s, --ukuran cetak ukuran yang dialokasikan dari setiap file, dalam blok SIZE mungkin (atau mungkin bilangan bulat opsional diikuti oleh) salah satu dari rendah: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024, dan seterusnya untuk G, T, P, E, Z, Y.