Quero reduzir o tamanho de um arquivo com força bruta, ou seja, não me importo com o resto, só quero cortar o arquivo, digamos pela metade, e descartar o restante.
A primeira coisa que vem à mente é o truncado de Perl . Estou seguindo o exemplo nessa página e fiz exatamente a mesma coisa:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Mas o arquivo ainda tem o mesmo tamanho:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Como posso fazer isso funcionar?
abre o arquivo para leitura. No entanto, para truncar o arquivo, você precisa modificá-lo, para que um identificador de arquivo somente leitura não funcione. Você precisa usar o modo "modificar" (
"+>"
).Como uma questão secundária, sempre me surpreende quando as pessoas deixam as chamadas do sistema falharem silenciosamente e depois perguntam o que deu errado. Uma parte essencial do diagnóstico de um problema é observar a mensagem de erro produzida; mesmo que você não entenda, isso facilita muito a vida de quem pede ajuda.
O seguinte teria sido um pouco mais útil:
embora seja certo que isso teria relatado apenas "argumento inválido". Ainda assim, essa é uma informação útil e pode ter levado você a concluir que o modo aberto estava errado (como aconteceu comigo).
fonte
Você pode usar
tail
para cortar os últimos 100000 bytes, exemplo:o -c gera os 100000 bytes finais do arquivo, para mais opções:
Para substituir o arquivo original pelo arquivo que você acabou de gerar:
fonte
A resposta acima citando truncado é boa. O dd também fará o trabalho:
fonte
existe uma maneira completamente diferente de fazer isso, com o bash, usando o programa ed. o script a seguir reterá apenas as últimas 5000 linhas de todos os arquivos localizados no diretório especificado. isso pode ser facilmente modificado para passar por vários diretórios, alterar o número de linhas etc.
fonte