Hasilkan File dengan ukuran tertentu?

106

Saya ingin membuat file dengan nama example.file. Saya bisa menggunakan

touch example.file

tapi saya ingin ukuran file persis 24MB. Saya sudah memeriksa halaman sentuh, tetapi tidak ada parameter seperti ini. Apakah ada cara mudah untuk menghasilkan file dengan ukuran tertentu?

R_User
sumber
Kami semua akan menganggap Anda tidak peduli apa konten yang diisi dengan nol akan baik-baik saja.
Bgs

Jawaban:

136

Anda dapat menggunakan dd:

dd if=/dev/zero of=output.dat  bs=24M  count=1

atau

dd if=/dev/zero of=output.dat  bs=1M  count=24

atau, di Mac,

dd if=/dev/zero of=output.dat  bs=1m  count=24
Paul92
sumber
2
... atau gunakan bs = 1M dan hitung = 24. Banyak yang merasa lebih bagus dan lebih mudah dibaca.
Bgs
3
Mungkin jangan gunakan ukuran blok besar, sistem saya tidak sukabs=1G count=1
ThorSummoner
10
Di Mac, gunakan 24 m (kecil m), karena Mac tidak suka M. besardd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN
1
Pada Android (5.1.1, mungkin (bukan) spesifik untuk versi atau ponsel) saya juga harus menggunakan huruf kecil m.
Erik
1
Apa masalah dengan ukuran blok besar khusus? Saya berharap untuk menggunakan ukuran blok 1G untuk file 1G.
felwithe
43

Di bawah Linux atau Cygwin yang tidak tertanam (atau sistem apa pun dengan GNU coreutils) dan FreeBSD:

truncate -s 24m example.file

Ini menciptakan file yang penuh byte nol. Jika file sudah ada dan lebih kecil, itu diperluas ke ukuran yang diminta dengan byte nol. Jika file sudah ada dan lebih besar, dipotong ke ukuran yang diminta.

Bytes nol tidak mengkonsumsi ruang disk apa pun, file tersebut adalah file yang jarang .

Pada banyak sistem, head -c 24m </dev/zero >example.filemembuat file non-jarang penuh dengan byte nol. Jika headtidak memiliki -copsi pada sistem Anda (itu biasa tetapi tidak dalam POSIX), Anda dapat menggunakannya dd bs=1024k count=24 </dev/zero >example.filesebagai gantinya (ini adalah POSIX-compliant).

Gilles
sumber
BusyBox juga memilikinya , jadi sebagian besar sistem embedded juga akan :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
29

Jika Anda tidak peduli dengan isi file, ini jauh lebih cepat daripada menggunakan dd:

fallocate -l 24M filename

Jelas, menggunakan dduntuk file 24MB tidak akan memakan waktu pada sistem modern, tetapi file yang lebih besar bisa terasa lambat.

Sarcher
sumber
13

Anda dapat menggunakan dd:

dd jika = / dev / nol = outputfile.out bs = 1024k hitung = 24

Atau jika Anda menggunakan Solaris

mkfile 24m outputfile.out
BitsOfNix
sumber
3
mkfile juga hadir di macOS
Ben Flynn
Anda juga dapat mengoper -nuntuk membuat file yang jarang
russbishop
0
FROM_NODE=N01;
echo; cd $MOUNT_PATH; pwd; ls -la; sleep 1; echo;
WHEN="$(date +%Y-%m-%d_%H-%M-%S)";
fallocate -l 10M $MOUNT_PATH/"$FROM_NODE"_"$WHEN".dump
ls -lha; echo;
Pascal Andy
sumber
1
Bukankah ini mengatakan 10 MB sedangkan Q meminta 24?
Jeff Schaller
2
fallocatebisa menjadi jawaban yang baik, tetapi mengapa semua baris lainnya? Potong jawaban Anda sehingga hanya melakukan apa yang diminta, dan tidak lebih.
JigglyNaga
1
Jika Anda lebih suka pak: fallocate -l 10M somefile.dump
Pascal Andy