Diferença entre arquivos no diretório [duplicado]

1

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?

    
por Shashi 02.09.2015 / 11:15

3 respostas

3

Você pode comparar diretórios com diff :

$ diff -qr dirA dirB
Only in dirB: file.txt
Files dirA/README and dirB/README differ
    
por 02.09.2015 / 12:13
0

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
    
por 02.09.2015 / 11:44
0

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 .

    
por 02.09.2015 / 12:04