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.