Saya memiliki file yang ingin saya pad hingga mencapai 16 MiB (16777216 bytes). Saat ini adalah 16515072 byte. Perbedaannya adalah 262144 byte.
Bagaimana saya memasangnya?
Ini sepertinya tidak berfungsi:
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
bs=1
dalamdd
adalah pengalaman saya sangat runtime mahal.truncate -s 16M thefile
Jawaban:
Letakkan
of=largerfile.txt
dan tambahkan stdout ke file:sumber
seek
adalah opsi yang tepat di sini.Selain jawaban untuk mendapatkan padding fisik Anda juga dapat meninggalkan sebagian besar ruang padding dalam file hanya kosong ("lubang"), dengan
seek
memasukkan ke posisi akhir file yang baru dan menulis satu karakter:(yang memiliki keuntungan untuk menjadi jauh lebih performan, khususnya dengan
bs=1
, dan tidak menempati sejumlah besar ruang disk tambahan).Metode itu tampaknya berfungsi bahkan tanpa menambahkan karakter apa pun, dengan menggunakan
if=/dev/null
dan ukuran file akhir yang diinginkan:Varian performan dari solusi pelapis fisik yang menggunakan ukuran blok yang lebih besar adalah:
sumber
truncate -s +262144 largerfile.txt
juga akan cepat.Browser terbaik di sini adalah Janis (di atas) karena memungkinkan Anda melupakan ukuran file saat ini dan pad langsung ke ukuran yang diinginkan tanpa perhitungan.
Itu juga mengambil keuntungan dari file jarang, yang menambahkan / dev / nol tidak.
Jawabannya bisa lebih rapi, karena 'hitung' diizinkan 0 dan Anda masih mendapatkan lapisan:
(Edit: ini benar untuk GNU dd, tetapi perilaku
count=0
spesifik platform, lihat komentar)sumber
count=0
tidak ditentukan, tetapi biasanya sama seperti ketika tidak adacount
parameter yang ditentukan. Lebih banyak masalah:dd
memotong file ke 16777216 byte, tetapi jika Anda berharap ini membuat lubang di akhir, Anda salah karena Anda pertama-tama harus menulis data setelah lubang dan kemudian memotongnya ke ukuran yang tidak mengandung data. .dd if=/dev/zero of=somefile
samadd if=/dev/zero of=somefile count=0
? Cobalah.count=0
adalah sama seperti jika Anda tidak menentukan parameter hitungan sama sekali. Ini berlaku setidaknya untuk semua implementasi yang berasal dari sumber asli. Coba saja, sepertinya Anda tidak pernah bekerja dengandd
perintah aslinya .count
makna 'abaikan parameter ini'. Bisakah kamu menemukan? Tanpa dokumentasi seperti itu,count=0
berarti 'tulis nol blok' dan penyimpangan dari ini adalah bug ... (sumber asli atau tidak ada).Apakah Anda harus menggunakan
dd
? Jika Anda ingin file memiliki panjang (logis) tertentu, cukup tulis nol ke posisi yang Anda inginkan. Bytes antara ujung sebelumnya dan byte tertulis akan ditampilkan sebagai byte nol. Berikut ini contoh menggunakan perl.Mengapa "- 2" di baris? Script akan menulis byte, jadi kita kurangi 1 untuk mencari ke posisi sebelum byte itu. Kami melepas yang lain karena posisi pencarian nol-diindeks.
sumber