Gerar arquivo de um determinado tamanho?


106

Eu gostaria de gerar um arquivo com o nome example.file. eu poderia usar

touch example.file

mas quero que o arquivo tenha exatamente 24 MB de tamanho. Eu já verifiquei a página de manual do toque, mas não há parâmetro como este. Existe uma maneira fácil de gerar arquivos de um determinado tamanho?



Todos assumiremos que você não se importa com o que o conteúdo é preenchido com zeros.
— Bgs

Respostas:


136

Você pode usar o dd:

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

ou

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

ou, no Mac,

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

2
... ou use bs = 1M e conte = 24. Muitos acham melhor e mais fácil de ler.
— Bgs

3
Talvez não usar tamanhos de blocos enormes, meu sistema não gostoubs=1G count=1
— ThorSummoner

10
No Mac, use 24m (pequeno m), porque o Mac não gosta do grande M.dd if=/dev/zero of=output.dat bs=24m count=1
— SPRBRN

1
No Android (5.1.1, pode (não) ser específico da versão ou do telefone) eu também precisava usar letras minúsculas m.
— Erik

1
Qual é o problema especificamente com tamanhos grandes de bloco? Eu esperava usar um tamanho de bloco 1G para um arquivo 1G.
— felwithe

43

Sob Linux ou Cygwin não incorporado (ou qualquer sistema com GNU coreutils) e FreeBSD:

truncate -s 24m example.file

Isso cria um arquivo cheio de bytes nulos. Se o arquivo já existir e for menor, ele será estendido para o tamanho solicitado com bytes nulos. Se o arquivo já existir e for maior, será truncado para o tamanho solicitado.

Os bytes nulos não consomem espaço em disco; o arquivo é um arquivo esparso .

Em muitos sistemas, head -c 24m </dev/zero >example.filecria um arquivo não esparso cheio de bytes nulos. Se headnão houver uma -copção no seu sistema (é comum, mas não no POSIX), você pode usá-lo dd bs=1024k count=24 </dev/zero >example.file(isso é compatível com POSIX).


BusyBox também tem , por isso, a maioria dos sistemas embarcados vai também :-)
— Ciro Santilli新疆改造中心法轮功六四事件

29

Se você não se importa com o conteúdo do arquivo, isso é muito mais rápido do que usar dd:

fallocate -l 24M filename

Obviamente, usar ddum arquivo de 24 MB não demorará muito tempo em um sistema moderno, mas arquivos maiores podem ser notavelmente lentos.


13

Você pode usar o dd:

dd se = / dev / zero de = arquivo de saída.out bs = 1024k count = 24

Ou caso você esteja usando o Solaris

mkfile 24m outputfile.out

3
mkfile parece estar presente no MacOS também
— Ben Flynn

Você também pode passar -npara criar um arquivo esparso
— 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;

1
Isso não diz 10 megas enquanto o Q pede 24?
— Jeff Schaller

2
fallocatepoderia ser uma boa resposta, mas por que todas as outras linhas? Reduza sua resposta para que ela faça exatamente o que foi solicitado e nada mais.
— precisa saber é o seguinte

1
Se você prefere senhor: fallocate -l 10M somefile.dump
— Pascal Andy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.