Por que meu patch está saindo em formato binário?

0

Estou digitando dois diretórios, 220 e sue, da seguinte maneira:

diff -r 220 sue > diff.txt

O diretório aparece da seguinte maneira:

$ ls -al
total 20
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 10:44 .
drwxrwx---+ 1 SYSTEM         SYSTEM           0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty         Domain Users 15463 Jun 24 10:44 diff.txt
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 09:55 sue

Confirmar diff.txt é o seguinte texto:

$ file diff.txt
diff.txt: HTML document, ASCII text, with very long lines, with CRLF, LF line terminators

O acima é principalmente para demonstrar que eu posso usar diff e ver que não há uma enorme quantidade de diferenças.

Em seguida, crie um arquivo de patch conforme sugerido pelo link :

$ diff -Naur 220 sue > patch.txt

Resulta no diretório da seguinte forma:

$ ls -al
total 133836
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 10:57 .
drwxrwx---+ 1 SYSTEM         SYSTEM               0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty         Domain Users     15463 Jun 24 10:44 diff.txt
-rw-rwxr--+ 1 jempty         Domain Users 137024100 Jun 24 10:57 patch.txt
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 09:55 sue

Como você pode ver, o arquivo patch.txt é enorme e, como se vê, é binário:

$ file patch.txt
patch.txt: data

Devo estar usando o comando patch em vez de diff

    
por George Jempty 24.06.2015 / 18:03

1 resposta

1

Você tem arquivos binários (programas, DLLs, arquivos de dados, etc.) em 220 ou sue ou ambos.

O primeiro comando ( diff -r ) reconhece que alguns arquivos são binários e, quando esse for o caso, diff simplesmente imprimirá uma mensagem diferente. Por exemplo, se os dois 220 e sue tiverem um arquivo binário foo.dat , você esperaria que a saída fosse algo assim:

Binary files 220/foo.dat and sue/foo.dat differ

O segundo comando tem o -a flag, que diz diff para tratar incondicionalmente todos os arquivos como texto simples, para comparar e imprimir o conteúdo bruto e binário das diferenças entre 220/foo.dat e sue/foo.dat . Como diff compara linha por linha, e arquivos binários normalmente têm poucas quebras de linha, as linhas comparadas e mostradas na saída serão bastante grandes, mesmo para arquivos relativamente pequenos.

Para reduzir o tamanho da saída de diff , não use o sinalizador -a :

$ diff -Nur 220 sue > patch.txt

Se você não se importa com as diferenças entre os arquivos binários, pode filtrar a saída para excluí-los:

$ diff -Nur 220 sue | grep -v '^Binary files.*differ' > patch.txt

Para responder sua última pergunta, patch é o oposto de diff , então você não usaria patch aqui. Você usa diff para encontrar as diferenças entre os arquivos e usa patch para aplicar as diferenças da saída de diff nesses arquivos. Os termos são usados de forma intercambiável quando se referem à saída de diff .

    
por 24.06.2015 / 20:17

Tags