Eu encontrei uma maneira no Windows de fazer isso
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
Existe uma maneira no UNIX de copiar um arquivo, anexar e depois repetir o processo? Algo como for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
na festança.type file >> file
executar em um loop infinito (pelo menos assim que for suficientemente grande para não caber em um buffer).Respostas:
Com
csh
/tcsh
:Com
zsh
:Nos sistemas GNU, consulte também:
Ou:
(cria um arquivo esparso de 10TiB (muito grande, mas não ocupa espaço no disco)) e as outras alternativas discutidas em "Criar um arquivo de teste com lotes de zero bytes" .
Fazer
cat file >> file
seria uma má ideia.Primeiro, ele não funciona com algumas
cat
implementações que se recusam a ler arquivos iguais ao seu arquivo de saída. Mas mesmo se você o contornarcat file | cat >> file
, sefile
for maior quecat
o buffer interno, isso causariacat
a execução em um loop infinito, pois acabaria lendo os dados que ele escreveu anteriormente.Em sistemas de arquivos apoiados por um disco rígido rotacional, também seria bastante ineficiente (depois de atingir um tamanho maior do que o que possivelmente seria armazenado em cache na memória), pois a unidade precisaria ir e voltar entre o local em que os dados foram lidos, e que onde escrevê-lo.
fonte
dd if=/dev/zero of=large-file bs=1024 count=1024
para um arquivo de 1 MBdd if=/dev/zero of=test bs=1M count=1
mais claro.dd
, mas eu nunca entendi o porquê. Na verdade, acho que só o usei para ler um MBR ou tarefas adicionais similares. Na minha experiência, outras ferramentas são mais rápidas, mais simples e seguras para a grande maioria dos casos em que as pessoas usamdd
. Eu acho que esse é um daqueles casos em que comum! = Ótimo, comosudo su
oucat file | grep foo
.Você pode criar um arquivo grande no Solaris usando:
Outra maneira que funciona no Solaris (e Linux):
Também é possível usar:
fonte
truncate
existe no Solaris 11.2+A maneira mais rápida possível de criar um arquivo grande em um sistema Linux é
fallocate
:fallocate
manipula o sistema de arquivos e, na verdade, não grava nos setores de dados por padrão e, como tal, é extremamente rápido. A desvantagem é que ela deve ser executada como raiz.Executando-o sucessivamente em um loop, você pode preencher o maior dos sistemas de arquivos em questão de segundos.
A partir de
man fallocate
fonte
Isso continuará até você CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Tenha cuidado, pois você pode obter centenas de milhares de linhas / segundo ...
De
man yes
:fonte
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
permitiria obter uma quantidade precisa. (-n $ TARGET_NUMBER_OF_LINES).yes
morreria automaticamente como resultado de um 'cano quebrado' quandohead
termina porque o número de destino foi atingido.Se eu entendi direito, você está procurando algo como:
Isso criará um arquivo com 22 repetições da "linha de teste". Se você deseja um tamanho de arquivo específico, pode usar algo assim (no Linux). 1024 é um kilobyte:
Pessoalmente, quando quero criar um arquivo grande, uso dois arquivos e coloco um no outro. Você pode repetir o processo até atingir o tamanho desejado (1 MB aqui):
Observe que essa solução geralmente excede o tamanho desejado, porque se o arquivo estiver abaixo do limite, tudo será novamente nele.
Por fim, se tudo o que você deseja é um arquivo do tamanho desejado e não precisa que ele realmente contenha nada, você pode usar
truncate
:fonte
cat
arquivo realmente tem alguma vantagem em acrescentar apenas? Parece que levaria mais tempo, pois ele precisa dividir dois processos a cada loop e também mover todo o conteúdo várias vezes.cat
abordagem é muito, muito mais rápida. Só faz sentido criar arquivos enormes, mas isso criou um arquivo de 545M em 10 segundos na minha máquina. O mesmowhile
loopecho "test line" >> file
criou um arquivo de 96K na mesma quantidade de tempo.truncate
, você podetruncate -s 1G
criar o arquivo em primeiro lugar. unix.stackexchange.com/a/269184/85549 . Você pode substituí-lo por umhead -c $DESIRED_SIZE
, possivelmente dentro dowhile
loop.Ao canalizar o conteúdo de
/dev/urandom
parahead
você pode redirecionar a saída para um arquivo, portanto:Fornecerá um arquivo com 100 bytes de lixo.
fonte
mesmo efeito do script do Windows, mas no bash, você não pode concatenar um arquivo diretamente para si mesmo.
fonte
.txt
extensão, você está deixando 2 arquivos grandes no final.