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
.