Você pode comparar diretórios com diff
:
$ diff -qr dirA dirB
Only in dirB: file.txt
Files dirA/README and dirB/README differ
Eu tenho dois diretórios com os mesmos arquivos, mas com alguma diferença em seu conteúdo. Eu quero listar os arquivos que são diferentes. Por exemplo
Existem duas pastas Folder1 e Folder2 com arquivos file1, file2, file3, etc. O arquivo2 da Pasta1 não é semelhante ao arquivo2 da Pasta2.
Então meu comando deve listar o arquivo2.
Como posso fazer isso?
Estou certo de que existem ferramentas especializadas para esse fim ( fdupes
vem à minha mente) este script simples deve fazer o trabalho:
#!/usr/bin/env sh
if [ "a$1" = a -o "a$2" = a ]
then
echo Directory name missing.
echo Exiting
exit 1
fi
for i in "$1"/*
do
filename=$(basename "$i")
diff "${1}/${filename}" "${2}/${filename}" > /dev/null 2>&1
if [ "$?" -eq 1 ]
then
echo "$filename" is different
fi
done
exit 0
Você precisa ter diff
binary no seu $PATH
(provavelmente você tem isso). Uso:
$ ./diff.sh Folder1 Folder2
7 is different
file2 is different
Solução 1:
Você pode dar uma olhada lá: link , especialmente a resposta de Rinzwind que estipula que você pode fazer diretamente diff -qr Folder1 Folder2
.
As outras soluções são úteis apenas se você quiser mesclar os resultados.
Solução 2: Se você puder executar o aplicativo GUI, a melhor solução seria usar meld ou kdiff3 .
Solução 3: Outra solução seria usar um software de controle de versão. Por exemplo, com o git, você pode fazer:
$ cd Folder1
$ git init
$ git add .
$ git commit -m "First commit"
$ rm -rf *
$ cp -r /PATH/TO/Folder2/* ./
Em seguida, você pode usar git status
ou git diff
para ver as diferenças. Para esta solução, você pode querer fazer um backup primeiro. Esteja ciente de que rm -rf *
não exclui arquivos de ponto.
Solução 4:
Finalmente, você pode dar uma olhada nesse vim
plugin (ainda não tentei): link . Tenho certeza de que esse plugin também existe para Emacs
.