Comparando diretórios usando diff

2

Estou tentando comparar dois diretórios que contêm arquivos binários, no AIX 6. Estou usando diff em preferência a dircmp , já que estou tentando manter um formato de saída consistente entre este e meu Linux servidores, onde dircmp não está disponível.

De acordo com a página diff man ,

If the Directory1 and Directory2 parameters are specified, the diff command compares the text files that have the same name in both directories. Binary files that differ, common subdirectories, and files that appear in only one directory are listed.

No entanto, os arquivos binários também estão sendo comparados e suas diferenças são emitidas para stdout, resultando na tela do terminal sendo inundada com caracteres não imprimíveis, até mesmo modificando o tamanho da minha janela (estou usando pUTTY ). A versão de diff não tem a opção -q . Existe alguma maneira de suprimir essa saída e apenas relatar que os arquivos são diferentes? Eu preferiria não usar rsync -n , já que isso precisa ser executado duas vezes, com e de parâmetros invertidos, para encontrar arquivos ausentes em ambos os lados.

Perguntas relacionadas: aqui e aqui

    
por rojomoke 23.09.2015 / 13:09

2 respostas

2

Há um limite de quanto de código portátil você pode escrever sem ter condicionais para executar coisas diferentes em sistemas diferentes. Não se sinta mal em usar dircmp se disponível ou GNU diff se disponível.

if type dircmp >/dev/null 2>/dev/null; then
  dircmp dir1 dir2
else
  diff -r dir1 dir2
fi

Se você deseja apenas saber quais arquivos foram alterados e não se importa com o conteúdo da listagem, é possível filtrar a diff de saída para reter apenas as linhas de cabeçalho. (Atenção: se você tem nomes de arquivos com novas linhas, a saída pode ser incomparável).

diff -r dir1 dir2 | grep -v '^[<>0-9]'

Faça com que grep -v '[^<>]' mantenha informações sobre o intervalo de linhas alteradas, mas ainda filtre o conteúdo das linhas alteradas.

    
por 24.09.2015 / 02:48
1

Você pode canalizar a saída por meio de cat -v para que os caracteres não imprimíveis sejam mostrados como ^x ou M-x , para que pelo menos seu terminal não seja corrompido. Se você sabe que tipo de títulos são impressos por cada arquivo diff, você pode grep apenas para eles, por exemplo, | grep -E 'Only in|differ' . (Eu não tenho um aix para encontrar exemplos destes).

    
por 23.09.2015 / 15:28