Generar archivo de cierto tamaño?

107

Me gustaría generar un archivo con el nombre example.file. Podría usar

touch example.file

pero quiero que el archivo tenga exactamente 24 MB de tamaño. Ya revisé la página de manual de touch, pero no hay ningún parámetro como este. ¿Hay una manera fácil de generar archivos de cierto tamaño?

R_Usuario
fuente
Todos asumiremos que no te importa el contenido que esté lleno de ceros estará bien.
Bgs

Respuestas:

137

Puedes usar 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, en Mac,

dd if=/dev/zero of=output.dat  bs=1m  count=24
Paul92
fuente
2
... o use bs = 1M y cuenta = 24. Muchos lo encuentran mejor y más fácil de leer.
Bgs
3
Tal vez no use bloques de gran tamaño, mi sistema no me gustóbs=1G count=1
ThorSummoner
10
En la Mac, use 24m (m pequeña), porque a la Mac no le gusta la gran M.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN
1
En Android (5.1.1, podría (no) ser una versión o un teléfono específico) también tuve que usar minúsculas m.
Erik
1
¿Cuál es el problema con los tamaños de bloque grandes específicamente? Tenía la esperanza de usar un tamaño de bloque 1G para un archivo 1G.
Felwithe
43

Bajo Linux no integrado o Cygwin (o cualquier sistema con GNU coreutils) y FreeBSD:

truncate -s 24m example.file

Esto crea un archivo lleno de bytes nulos. Si el archivo ya existe y es más pequeño, se extiende al tamaño solicitado con bytes nulos. Si el archivo ya existe y es más grande, se trunca al tamaño solicitado.

Los bytes nulos no consumen espacio en disco, el archivo es un archivo disperso .

En muchos sistemas, head -c 24m </dev/zero >example.filecrea un archivo no disperso lleno de bytes nulos. Si headno tiene una -copción en su sistema (es común pero no en POSIX), puede usar dd bs=1024k count=24 </dev/zero >example.fileen su lugar (esto es compatible con POSIX).

Gilles
fuente
BusyBox también lo tiene , por lo que la mayoría de los sistemas integrados también lo harán :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
29

Si no le importa el contenido del archivo, esto es mucho más rápido que usar dd:

fallocate -l 24M filename

Obviamente, usar ddun archivo de 24 MB no tomará tiempo en un sistema moderno, pero los archivos más grandes pueden ser notablemente lentos.

Sacher
fuente
13

Puedes usar dd:

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

O en caso de que esté usando Solaris

mkfile 24m outputfile.out
BitsOfNix
fuente
3
mkfile también parece estar presente en macOS
Ben Flynn
También puede pasar -npara crear un archivo disperso
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
fuente
1
¿No dice esto 10 megas mientras la Q pide 24?
Jeff Schaller
2
fallocatepodría ser una buena respuesta, pero ¿por qué todas las otras líneas? Reduzca su respuesta para que haga exactamente lo que se le pidió y nada más.
JigglyNaga
1
Si prefiere señor: fallocate -l 10M somefile.dump
Pascal Andy