Se eu ligo um arquivo para outro arquivo, há uma maneira de separá-lo novamente?

3

Se eu usar o cat pic1.png >> pic2.png existe uma maneira de obter pic1.png desse pic2.png ?

Eu sei que funciona se eu simplesmente usar algum arquivo e simplesmente desarquivá-lo, mas eu quero saber se é possível de outra maneira.

    
por Viped 10.10.2014 / 15:53

2 respostas

3

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).

    
por Rmano 10.10.2014 / 15:58
0

Uma maneira é olhar para o formato de arquivo PNG

link

O formato de arquivo PNG tem um cabeçalho e uma série de blocos que definem a maneira como um arquivo PNG é construído. Se você encadear através dos pedaços, você deve conseguir extrair os arquivos PNG. Você pode ter sorte e usar os primeiros 8 bytes do arquivo PNG como um identificador para encontrar o ponto de separação.

    
por Meer Borg 10.10.2014 / 16:08