Usando o BSD jot para gerar arquivo com conteúdo aleatório

2

Citações de Usando o BSD jot

Most every Linux system comes with GNU seq (a utility to generate sequences of numbers or characters). However, a much older utility – and more flexible one – is the underutilized and unknown utility, jot. Every BSD system, including MacOS X, will come with jot (and not with seq).

(...)

In fact, to generate a large file (5Gb in this case), try this:

jot -r -c -s '' $(( 1024 * 1024 * 5 )) > file.5gb

Quando eu tento isso, gera um arquivo de 5 MB.

jot -r -c -s '' $(( 1024 * 1024 * 5 )) > file.5gb
du -sh file.5gb
5.0M    file.5gb

O que esse comando faz exatamente? Como especificar o tamanho, por exemplo, 2 GB de arquivo? Essa é a maneira recomendada de gerar arquivos de conteúdo aleatórios no macOS? Você usa outras ferramentas para arquivos de conteúdo aleatório?

seq não pode gerar conteúdo aleatório. Está correto?

    
por Ivanov 02.04.2017 / 06:34

1 resposta

4

O exemplo está um pouco errado e o resultado está correto. Deixe-me explicar.

O $(( 1024 * 1024 * 5 )) é simplesmente uma soma, mas só funcionará no ambiente sh shell. Por exemplo:

sh
echo $(( 1024 * 1024 * 5))
5242880

Essa parte foi classificada de volta para jot . O -r é para "dados aleatórios" e deve ser o que você encontra no arquivo.

O -c é uma forma abreviada e é igual ao uso de -w %c . Embora eu não saiba exatamente o que significa %c , ele parece produzir um único byte de dados aleatórios. Você poderia trocar o -c por -b x e obteria o mesmo arquivo de tamanho, mas ele conteria apenas o x repetido.

O próximo é -s '' , o que significa que nenhuma linha é retornada. Sem isso, haveria um retorno de linha após cada caractere (ou dados aleatórios). Seu arquivo também deve ser duas vezes maior.

A próxima parte é $(( 1024 * 1024 * 5 )) . Essa é a quantidade de "dados" a produzir. Como mostrado acima, essa soma torna o número 5242880 (que é de apenas 5 MiB) e esse é o tamanho do arquivo mais 1 byte para o retorno da linha à direita. Por exemplo:

sh
jot -r -c -s '' $(( 1024 * 1024 * 5 )) > file.5mb
ls -al file.5mb
-rw-r--r--  1 tigger  tigger  5242881  2 Apr 15:39 file.5mb
    
por 02.04.2017 / 07:50