Generare file di una certa dimensione?


107

Vorrei generare un file con il nome example.file. Potrei usare

touch example.file

ma voglio che il file abbia dimensioni esatte di 24 MB. Ho già controllato la manpage di touch, ma non esiste un parametro come questo. C'è un modo semplice per generare file di una certa dimensione?



Assumeremo tutti che non ti interessa ciò che il contenuto è così pieno di zero andrà bene.
Bgs

Risposte:


137

Puoi usare dd:

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

o

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

o, su Mac,

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

2
... oppure usa bs = 1M e count = 24. Molti lo trovano più bello e più facile da leggere.
Bgs

3
Forse non usare blocchi di dimensioni enormi, il mio sistema non mi è piaciutobs=1G count=1
ThorSummoner il

10
Sul Mac, usa 24m (piccolo m), perché al Mac non piace il grande M.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN,

1
Su Android (5.1.1, potrebbe (non) essere versione o specifico del telefono) ho dovuto usare anche una minuscola m.
Erik,

1
Qual è il problema con blocchi di grandi dimensioni in particolare? Speravo di usare una dimensione di blocco 1G per un file 1G.
Felwithe

43

Sotto Linux o Cygwin non embedded (o qualsiasi sistema con core GNU GNU) e FreeBSD:

truncate -s 24m example.file

Questo crea un file pieno di byte null. Se il file esiste già ed è più piccolo, viene esteso alla dimensione richiesta con byte null. Se il file esiste già ed è più grande, viene troncato alla dimensione richiesta.

I byte null non consumano spazio su disco, il file è un file sparse .

Su molti sistemi, head -c 24m </dev/zero >example.filecrea un file non sparse pieno di byte null. Se headnon hai -cun'opzione sul tuo sistema (è comune ma non in POSIX), puoi dd bs=1024k count=24 </dev/zero >example.fileinvece usare (questo è conforme a POSIX).


Anche BusyBox ce l' ha , quindi anche la maggior parte dei sistemi embedded :-)
Ciro Santilli 3 改造 中心 法轮功 六四 事件

29

Se non ti interessa il contenuto del file, questo è molto più veloce dell'uso dd:

fallocate -l 24M filename

Ovviamente, l'utilizzo ddper un file di 24 MB non richiederà alcun tempo su un sistema moderno, ma i file più grandi possono essere notevolmente lenti.


13

Puoi usare dd:

dd if = / dev / zero of = outputfile.out bs = 1024k count = 24

O nel caso in cui usi Solaris

mkfile 24m outputfile.out

3
mkfile sembra essere presente anche su macOS
Ben Flynn,

Puoi anche passare -na creare un file sparse
russbishop l'

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;

1
Questo non dice 10 mega mentre il Q chiede 24?
Jeff Schaller

2
fallocatepotrebbe essere una buona risposta, ma perché tutte le altre righe? Riduci la risposta in modo che faccia esattamente ciò che è stato chiesto e nient'altro.
JigglyNaga,

1
Se preferisci signore: fallocate -l 10M somefile.dump
Pascal Andy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.