Como posso criar um arquivo (por exemplo, usando o touch
comando ou outra maneira semelhante), mas com um tamanho específico (por exemplo, 14 MB)?
O caso de uso é testar o FTP com vários tamanhos de arquivo. Se conseguirmos criar um arquivo com um tamanho específico, será útil verificar a transferência FTP etc.
linux
command-line
fasil
fonte
fonte
Respostas:
Use
truncate
:De
man truncate
:Nota:
truncate
pode não estar disponível no seu sistema, por exemplo, no Mac OS X, ele não está instalado por padrão (mas você pode instalá-lo facilmente, usando macports, por exemplo). Nesses casos, você pode precisar usardd
ouhead
substituir.fonte
touch
não é necessário, porém, você pode simplesmente executá-truncate -s 14M filename
lo e criarfilename
diretamente.EDIT: A maneira mais simples é provavelmente a resposta
truncate
de Ashutosh Vishwa Bandhu , mas como apontado por @ offby1, que cria arquivos esparsos que podem não ser o que você deseja. As soluções abaixo criam arquivos completos normais.Os seguintes comandos criam um arquivo de 14 MB chamado
foo
:fallocate
(obrigado a @Breakthrough, que sugeriu isso nos comentários e vote na resposta de Ahmed Masud abaixo, que também a menciona.)Este comando é particularmente impressionante, pois é tão rápido quanto
truncate
(instantâneo), independentemente do tamanho do arquivo desejado (diferente das outras soluções que serão lentas para arquivos grandes) e ainda cria arquivos normais, e não esparsos:Crie um arquivo preenchido com dados aleatórios
ou
Crie um arquivo preenchido com
\0
s:ou
Crie um arquivo preenchido com os primeiros 14 MB de dados de outro arquivo:
Crie um arquivo preenchido com os últimos 14 MB de dados de outro arquivo:
Em todos os exemplos acima, o arquivo será,
14*1000*1000
se você desejar14*1024*1024
, substituaMB
porM
. Por exemplo:fallocate
lida apenas em bytes, então você teria que fazer (14 * 1024 * 1024 = 14680064)fonte
dd
se houver uma abordagem mais simples e menos potencialmente destrutiva.dd
solução tem uma alternativa não dd.dd
comando na página wiki é completamente diferente e não é usado/dev/zero
. Quanto a saber se éM
ouMB
não mais lógico, aceite os desenvolvedores. As páginas de manual de cabeça , cauda e dd indicam claramente que "MB = 1000 * 1000, M = 1024 * 1024". Isso pode ser diferente em outros * nixes.O WARNING
dd
substituirá silenciosamente qualquer coisa para a qual você tenha o direito de gravar, se você especificar voluntariamente ou por acidente. Certifique-se de entenderdd
, por exemplo. com a leituradd --help
e você não estraga suas linhas de comando dd, ou pode facilmente criar perda irreversível de dados - mesmo total .Para iniciar,
if=
é o arquivo de entrada eof=
é o arquivo de saída . Sempre verifique se você acertou antes de executar o comando. :)fonte
Página de manual Use magic
dd
;)causar 14 MB * 1024 = 14336 KB, ou:
E você obterá o arquivo 14mb output.dat, preenchido com zeros: D
fonte
Essa deve ser a maneira mais rápida de fazer isso:
Caso contrário, basta escrever um programa C ou perl rápido e sujo que procura a posição exata e grava um único byte. Isso é muito mais rápido do que realmente despejar dados nos blocos.
Se você quer evitar arquivos esparsos, em seguida, no Linux (e possivelmente outros sistemas), você pode usar
fallocate -l <length>
a partirutil-linux
.Se não estiver disponível, e você tiver um sistema compatível com POSIX, poderá escrever um programa rápido e sujo usando a chamada de biblioteca posix_fallocate (). posix_fallocate garante a alocação do intervalo especificado, para que você não fique com um disco cheio no uso subsequente do intervalo se ele retornar com êxito
fonte
Embora
dd
seja a maneira portátil de fazer isso, os comandosmkfile
exfs_mkfile
são escritos especificamente para esse fim e são mais rápidos:O problema é que nenhum dos comandos está disponível universalmente, portanto, eles não são bons para escrever scripts portáteis. No entanto, se eu estiver fazendo isso de forma interativa pela linha de comando, esses são os comandos que eu uso.
Por padrão, eles criam arquivos preenchidos com zero e não arquivos esparsos (ou "holey") . Ambos têm a
-n
opção de criar arquivos esparsos.fonte
Há outra opção no Perl:
perl -e 'print "a" x 1024' > file.txt
Isso criará um arquivo de 1 KB. Substitua 1024 pelo número que desejar.
fonte