Gerar arquivo de um determinado tamanho?

92

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

touch example.file

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

    
por R_User 15.11.2013 / 20:54

5 respostas

122

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
    
por 15.11.2013 / 21:01
38

No Linux ou Cygwin não embutido (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, ele será truncado para o tamanho solicitado.

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

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

    
por 17.11.2013 / 23:18
22

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 dd para um arquivo de 24MB não levará nenhum tempo em um sistema moderno, mas arquivos maiores podem ficar consideravelmente lentos.

    
por 24.07.2017 / 06:35
12

Você pode usar o dd:

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

Ou caso você esteja usando o Solaris

mkfile 24m outputfile.out
    
por 15.11.2013 / 21:25
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;
    
por 19.01.2017 / 20:52