Eu tenho um arquivo que contém lixo (cabeçalho e rodapé binários) no início e no final do arquivo. Eu gostaria de saber como destruir esses bytes. Por exemplo, vamos supor 25 bytes desde o início. E, 2 bytes do final.
Eu sei que posso usar truncate e dd, mas truncate não funciona com um stream e parece meio complicado executar dois comandos no arquivo rígido. Seria melhor se truncate
, sabendo o tamanho do arquivo, pudesse catá-lo para dd
. Ou se houvesse uma maneira melhor de fazer isso?
Responder1
Responder2
ddfará as duas coisas por você em um único comando. Defina o tamanho do bloco para 1 byte, pule os 25 primeiros bytes, conte até o tamanho do arquivo menos os bytes de salto e final.
100 byte file
file.img
dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73
Verifique novamente os números porque eles podem contar a partir de 0.
Responder3
Com ksh93:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25))
Ou para fazer isso no local:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25)) 1<>; file
Se você tiver /opt/ast/bin
à frente do seu $PATH
, você obterá o head
arquivo embutido.
<#((...))
é umlseek()
operador....
é interpretado como uma expressão aritmética ondeEOF
é o comprimento do arquivo. Acima, estamos atribuindo o comprimento da parte a ser exibida$n
e buscando 25 bytes dentro do arquivo.<>;
é um operador de redirecionamento aberto em leitura + modo de gravação e truncamento se o comando for bem-sucedido.