Experimente este comando:
find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;
Como usar?
Passo 1: Crie um diretório temporário para mover arquivos duplicados para dentro dele:
ToDelete=/tmp/ToDelete; mkdir -p "$ToDelete"
Etapa 2: Defina destdir
como seu diretório FolderA, e queremos excluir as fotos duplicadas de lá.
destdir=/path/to/FolderA
Etapa 3 cd para seu primeiro diretório de origem (FolderB) e execute o comando
cd /path/to/FolderB
find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;
Passo 4: Agora vá ao seu próximo diretório fonte (FolderC) e execute novamente o comando
cd /path/to/FolderC
find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -v "$destdir/{}" "$ToDelete"/ \;
Ok. Agora, se você testar o comando e ver o resultado, remova o comando echo
para mover as fotos duplicadas para o diretório /tmp/ToDelete
.
Veja o teste abaixo:
$ ls ~/FolderA
1.jpg 2.jpg 6.jpg 7.jpg 8.jpg
$ ls ~/FolderB
3.jpg 4.jpg 5.jpg 7.jpg 8.jpg 9.jpg
$ ls ~/FolderC
6.jpg 7.jpg 8.jpg 9.jpg
$ ToDelete=/tmp/ToDelete; mkdir -p "$ToDelete"
$ ls /tmp/ToDelete/
$ destdir=~/FolderA
$ cd ~/FolderB
/FolderB$ find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -v "$destdir/{}" "$ToDelete"/ \;
‘/home/Fischer/FolderA/./8.jpg’ -> ‘/tmp/ToDelete/8.jpg’
removed ‘/home/Fischer/FolderA/./8.jpg’
‘/home/Fischer/FolderA/./7.jpg’ -> ‘/tmp/ToDelete/7.jpg’
removed ‘/home/Fischer/FolderA/./7.jpg’
/FolderB$ cd ~/FolderC
/FolderC$ find . -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -v "$destdir/{}" "$ToDelete"/ \;
‘/home/Fischer/FolderA/./6.jpg’ -> ‘/tmp/ToDelete/6.jpg’
removed ‘/home/Fischer/FolderA/./6.jpg’
/FolderC$ ls /tmp/ToDelete/
6.jpg 7.jpg 8.jpg
/FolderC$ ls -l ~/FolderA
1.jpg 2.jpg
/FolderC$ C00L ;)
E como funciona?
Quando você muda para o FolderB ou FolderC e executa o comando de localização , então você está procurando por qualquer arquivo nele ( .
se refere ao diretório atual) e então com comando cmp (usado para comparar dois arquivos byte por byte) compare cada arquivo ( {}
) em FolderB / FolderC com arquivos em destdir
(FolderA ( $destdir/{}
)) se eles forem iguais em seguida, movemos esse arquivo (do FolderA para o diretório temp em /tmp/ToDelete
) com o próximo comando mv -exec mv "$destdir/{}" "$ToDelete"/ \;
.