Eu tenho um arquivo que desejo preencher até atingir 16 MiB (16777216 bytes). Atualmente, são 16515072 bytes. A diferença é de 262144 bytes.
Como faço para preenchê-lo?
Isso não parece estar funcionando:
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
bs=1
emdd
é na minha experiência muito tempo de execução caro.truncate -s 16M thefile
Respostas:
Solte
of=largerfile.txt
e adicione stdout ao arquivo:fonte
seek
é uma opção certa aqui.Além das respostas para obter um preenchimento físico, você também pode deixar a maior parte do espaço preenchido no arquivo apenas vazio ("buracos"),
seek
acessando a nova posição final do arquivo e escrevendo um único caractere:(que tem a vantagem de ter muito mais desempenho, especificamente com
bs=1
e não ocupa grandes quantidades de espaço em disco adicional).Esse método parece funcionar mesmo sem adicionar nenhum caractere, usando
if=/dev/null
e o tamanho final do arquivo desejado:Uma variante de desempenho de uma solução de preenchimento físico que usa tamanhos de bloco maiores é:
fonte
truncate -s +262144 largerfile.txt
, também seria rápido.A melhor resposta aqui é a de Janis (acima), pois permite esquecer o tamanho do arquivo atual e ajustar diretamente para o tamanho desejado sem cálculo.
Ele também tira proveito dos arquivos esparsos, que não são adicionados ao / dev / zero.
A resposta pode ser mais organizada, porque 'count' pode ser 0 e você ainda recebe o preenchimento:
(Edit: isso está correto para o GNU dd, mas o comportamento de
count=0
é específico da plataforma, consulte os comentários)fonte
count=0
não é especificado, mas geralmente é o mesmo de quando nenhumcount
parâmetro foi especificado. Mais problemas:dd
trunca o arquivo para 16777216 bytes, mas se você espera que isso crie um furo no final, você está enganado, pois você primeiro precisaria gravar dados após o furo e depois truncá-lo para um tamanho que não contenha dados .dd if=/dev/zero of=somefile
é o mesmo quedd if=/dev/zero of=somefile count=0
? Tente.count=0
é o mesmo que se você não especificou um parâmetro de contagem. Isso é verdade pelo menos para todas as implementações que foram derivadas das fontes originais. Experimente, parece que você nunca trabalhou com odd
comando original .count
significado 'ignorar este parâmetro'. Você pode encontrar algum? Sem essa documentação,count=0
significa 'escrever zero blocos' e qualquer desvio disso é um bug ... (fontes originais ou não).Você tem que usar
dd
? Se você deseja que um arquivo tenha um comprimento (lógico) específico, basta escrever um zero na posição desejada. Os bytes entre o final anterior e o byte gravado serão exibidos como tendo bytes nulos. Aqui está um exemplo usando perl.Por que o "- 2" na linha? O script escreverá um byte, portanto subtraímos 1 para procurar a posição anterior a esse byte. Nós decolamos do outro porque a posição de busca é indexada em zero.
fonte