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?

R_User
fonte
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
Paul92
fonte
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).

Gilles
fonte
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.

SArcher
fonte
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
BitsOfNix
fonte
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;
Pascal Andy
fonte
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