Eu tenho um arquivo xml de 150 GB que gostaria de encurtar (ou seja, truncar) para cerca de 1 GB - existe um comando simples (bash ou similar) que eu possa usar ou preciso seguir a rota programática (editando-o no vi ou emacs é um pesadelo mesmo em grandes sistemas de ferro)?
(Não estou particularmente preocupado com a perda de informações, quero um arquivo mais curto para poder testar um software e não esperar muitas horas pela resposta, um arquivo mais curto me permitirá fazer isso.)
Responder1
Supondo que você queira truncar e extrair o primeiro 1 GB do arquivo de 150 GB:
Com head
:
head -c 1G infile > outfile
Observe que o G
sufixo pode ser substituído por GB
para alinhar com 1000 em vez de 1024.
Ou com dd
:
dd if=infile of=outfile bs=1M count=1024
Ou, como na resposta de Wumpus Q. Wumbley, dd
pode truncar no lugar.
Responder2
Responder3
Sempre que possível, eu usaria o truncate
comando como na resposta de John1024. Porém, não é um comando unix padrão, então algum dia você poderá não conseguir usá-lo. Nesse caso, dd
também é possível fazer um truncamento no local.
dd
O comportamento padrão do é truncar o arquivo de saída no ponto onde a cópia termina, então você apenas fornece a ele um arquivo de entrada de comprimento 0 e diz para ele começar a escrever no ponto de truncamento desejado:
dd if=/dev/null of=filename bs=1048576 seek=1024
(Isso não é o mesmo que copiar e truncar dd
na resposta do multithr3at3d.)
Observe que usei 1048576 e 1024 porque 1048576*1024 é o tamanho desejado. Evitei bs=1m porque esta é uma resposta de "portabilidade" e o clássico dd
só conhece os sufixos k
, b
e w
.
Responder4
Você pode usar o split
comando.
split -C 1G <filename>
Para mais detalhes dê uma olhada nissoresposta stackoverflow