Ficheiros de diferenças presentes em duas pastas diferentes

Tenho duas pastas com a mesma lista de ficheiros. Preciso de comparar todos os ficheiros presentes em ambas as pastas usando o comando diff. Existe uma opção simples de linha de comando para fazê-lo, ou eu tenho que escrever um script shell para obter a listagem de arquivos e, em seguida, iterar através deles?

Author: Teun Zengerink, 2010-01-07

7 answers

Pode usar o comando diff para isso:

diff -bur folder1/ folder2/

Isto irá produzir uma diferença recursiva que ignora os espaços, com um contexto unificado:

  • B bandeira significa ignorar espaços em branco
  • U bandeira significa um contexto unificado (3 linhas antes e depois)
  • R a bandeira significa recursiva
 338
Author: Laurent Etiemble, 2017-01-19 16:14:27

Se você só está interessado em ver os arquivos que diferem, você pode usar:

diff -qr dir_one dir_two | sort

A opção "q "só irá mostrar os ficheiros que diferem, mas não o conteúdo que difere, e" ordenar " irá organizar o resultado alfabeticamente.

 85
Author: Suresh, 2014-10-31 16:09:08

O Diff tem uma opção {[[0]} que é destinada a fazer exactamente isso.

diff -r dir1 dir2

 17
Author: CodeRain, 2010-01-07 11:30:02

diff não pode apenas comparar dois arquivos, pode, usando a opção -r, percorrer árvores de diretórios inteiras, verificando recursivamente diferenças entre subdiretórios e arquivos que ocorrem em pontos comparáveis em cada árvore.

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...
 9
Author: miku, 2010-01-07 11:28:53

Se é o GNU diff então você deve ser capaz de apontá-lo para os dois diretórios e usar a opção-R.

Caso contrário, tente usar
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
Como indicado pelo Dennis na secção de comentários, não precisas de substituir o comando no ls. Estou fazendo isso há tanto tempo que estou fazendo isso em piloto automático e substituindo o comando que preciso para obter Minha Lista de arquivos para comparação. Além disso, esqueci-me de acrescentar que faço "\ ls" desativar temporariamente meu pseudônimo de ls para GNU ls para que eu perca a informação de formatação de cores da listagem retornada pelo GNU ls.
 3
Author: Rob Wells, 2010-01-07 12:55:23

Aqui está um programa para mostrar as diferenças entre os ficheiros em duas pastas. Funciona recursivamente. Mudar a dir1 e a dir2.

(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/}   $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
 0
Author: Evgeny Karpov, 2016-02-17 14:02:37

Tenta isto:

diff -rq /path/to/folder1 /path/to/folder2      
 -2
Author: Sonali Birari, 2017-06-06 18:00:02