linux - paginado - Dadas duas árvores de diretórios, como posso descobrir quais arquivos diferem?




listar paginado linux (6)

"Faturamento" de compatriotas do canal (de freenode / # centos fame) compartilhou seu método comigo:

diff -Naur dir1/ dir2

Incluir a barra final do diretório não importa.

Além disso, parece que a opção -u não está disponível em algumas versões antigas / servidor do diff.

A diferença nos diffs:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

https://code.i-harness.com

Se eu quiser encontrar as diferenças entre duas árvores de diretórios, eu geralmente apenas executo:

diff -r dir1/ dir2/

Isso mostra exatamente quais são as diferenças entre os arquivos correspondentes. Estou interessado em apenas obter uma lista de arquivos correspondentes cujo conteúdo seja diferente. Eu assumi que isso seria simplesmente uma questão de passar uma opção de linha de comando para diff , mas não consegui encontrar nada na página man.

Alguma sugestão?


Estes dois comandos fazem basicamente a coisa pedida:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

A escolha entre eles depende da localização de dir1 e dir2:

Quando os diretórios residem em duas unidades separadas, o diff supera o rsync. Mas quando os dois diretórios comparados estão na mesma unidade, o rsync é mais rápido. É porque diff coloca uma carga quase igual em ambos os diretórios em paralelo, maximizando a carga nas duas unidades.

O rsync calcula as somas de verificação em grandes blocos antes de compará-los. Isso agrupa as operações de E / S em grandes blocos e leva a um processamento mais eficiente quando as coisas ocorrem em uma única unidade.


O comando que eu uso é:

diff -qr dir1/ dir2/

É exatamente o mesmo que o de Mark :) Mas sua resposta me incomodou, pois usa diferentes tipos de sinalizadores, e isso me fez olhar duas vezes. Usando as flags mais verbosas de Mark, seria:

diff  --brief --recursive dir1/ dir2/

Peço desculpas por postar quando a outra resposta é perfeitamente aceitável. Não consegui me conter ... trabalhando em ser menos pedante.


Para encontrar diff use este comando:

diff -qr dir1/ dir2/

-r também irá diferenciar todos os subdiretórios. -q diz ao diff para reportar somente quando os arquivos forem diferentes.

diff  --brief dir1/ dir2/

--brief mostrará os arquivos que existem no diretório.

Se não

podemos usar o Meld, que mostrará na janela gráfica sua fácil localização.

meld  dir1/ dir2/

Você disse Linux, então você tem sorte (pelo menos deveria estar disponível, não tenho certeza quando foi adicionado):

diff --brief -r dir1/ dir2/

Deve fazer o que você precisa.

Se você também quiser ver diferenças para arquivos que podem não existir em nenhum dos diretórios:

diff --brief -Nr dir1/ dir2/

Diffoscope é uma ótima ferramenta de comparação de diretórios baseada em linha de comando.

Eu gosto especialmente sobre isso que pode se diferenciar em arquivos:

Ele irá descompactar recursivamente arquivos de vários tipos e transformar vários formatos binários em formatos mais legíveis para compará-los. Ele pode comparar duas tarballs, imagens ISO ou PDF com a mesma facilidade.

Ele não apenas informará quais arquivos diferem, mas também como eles diferem.







diff