Unindo arquivos com confusão de gato

2

Se eu fizer os seguintes comandos:

$ cat picture.jpg > copy1.jpg

e

$ cat -v picture.jpg > copy2.jpg

copy1.jpg é uma cópia perfeita de picture.jpg , mas copy2.jpg é muito maior que picture.jpg .

Suponho que isso ocorra porque copy2.jpg teve cada pensamento que o gato considerou que suas terminações de linha foram substituídas por ^M e cada ^M é maior em tamanho do que uma linha final. Está correto?

Se então cat copy2.jpg , não há instâncias de ^M em copy2.jpg .

O que está acontecendo aqui? E pode-se confiar no gato para unir arquivos usando perfeitamente > , se sua saída pode ser diferente de sua entrada?

    
por EmmaV 06.10.2014 / 03:55

2 respostas

5

Não é só ^M . Todo byte com um caractere não imprimível (o que quer que isso signifique em sua localidade atual) será expandido para um equivalente imprimível de múltiplos bytes em cat -v .

Se você estiver usando cat para unir arquivos, precisará evitar todas as opções que modifiquem a saída: -b e -n (linhas de números), -E (marca os finais de linha com $ ) , -s (suprime linhas vazias repetidas) e -v e -T (exibem caracteres não imprimíveis usando caracteres imprimíveis).

    
por 06.10.2014 / 04:10
1

Sua análise parece correta para mim. Eu usaria cat para juntar arquivos, já que essa é sua função principal. Basta fazer isso sem a opção -v ou qualquer opção específica.

Usar cat -v .. no arquivo foi basicamente descartado. Você tentou abri-lo em um visualizador de imagens? Eu tentei o seu método e foi exatamente isso que aconteceu com o meu.

Você pode ver a evidência disso usando o comando file também:

$ file copy*
copy1.png: PNG image data, 1440 x 847, 8-bit/color RGB, non-interlaced
copy2.png: ASCII text, with very long lines

A página de informações de cat esclarece um pouco mais sobre o assunto:

'-v'
'--show-nonprinting'
     Display control characters except for LFD and TAB using '^'
     notation and precede characters that have the high bit set with
     'M-'.

On systems like MS-DOS that distinguish between text and binary
files, 'cat' normally reads and writes in binary mode.  However, 'cat'
reads in text mode if one of the options '-bensAE' is used or if 'cat'
is reading from standard input and standard input is a terminal.
Similarly, 'cat' writes in text mode if one of the options '-bensAE' is
used or if standard output is a terminal.

Então, onde estão os ^ M's?

Se você abrir o arquivo copy2.jpg em vim , verá que está cheio deles, por exemplo:

    
por 06.10.2014 / 04:07

Tags