Com cat file_b >> file_a
, você está apenas anexando o conteúdo de file_b
a file_a
. Nenhuma alteração de formato, nenhuma outra manipulação (1) (2).
Você pode voltar apenas removendo os últimos bytes dos arquivos; provavelmente algo como
head --bytes=-$(wc --bytes file_b | cut -d" " -f1) file_a > old_file_a
deve funcionar.
Explicação:
wc --bytes file_b
retorna o comprimento de file_b
em bytes (e o nome dos arquivos, como " 5678 file_b
")
wc --bytes file_b | cut -d" " -f1
elimina o nome do arquivo na saída de wc
mantendo apenas o primeiro campo (" 5678
"). Em seguida, usamos uma substituição de processo para colocar esse número como um argumento para head
:
head --bytes=-5678 file_a
exibe todo o conteúdo de file_a
mas os últimos 5678 bytes.
Notas de rodapé:
(1) No exemplo do OP, duvido que o arquivo pic2.png
ainda seja um arquivo PNG válido ...
(2) Incluído em "outras manipulações" está o fato de que não há registro do comprimento original do arquivo ou de qualquer marcador que separe os dois arquivos. Se depois de cat
você excluir file_b
, não terá como separá-los novamente sem saber o tamanho dos arquivos originais. Um formato de arquivador (tar, zip, rar) está fazendo exatamente esta contabilidade para você (e comprime e soma de verificação e outra coisa, algum dia).