procura por fotos duplicadas

1

Eu tenho fotos, na pasta A, elas também existem, nas pastas B e C. Elas têm os mesmos nomes de arquivos. Como procurá-los e excluí-los da pasta A? Um script perl ou algo assim seria ideal, pois não gosto de baixar um software para essa tarefa.

    
por Lynob 23.10.2014 / 23:08

4 respostas

1

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"/ \; .

    
por αғsнιη 24.10.2014 / 15:09
1

O programa findimagedupes deve fazer o que você solicita:

  

Encontra imagens visualmente semelhantes ou duplicadas

O programa é um programa perl simples e pode ser iniciado a partir da linha de comando - mas também está disponível como um pacote de software.

    
por liquidat 23.10.2014 / 23:50
1

você poderia usar o programa fslint

procura por duplicatas (entre outras coisas)

O fslint pode ser baixado no centro de software. fslint tem uma interface de usuário quando você abre o programa, a primeira aba é sobre encontrar duplicata. você pode especificar a pasta / pastas.

mais informações: manual do usuário fslint

    
por viking 24.10.2014 / 02:46
0

se for um pequeno número de fotos, você pode usar o nautilus ou outro gerenciador de arquivos

  • vá para a pasta pai de A, B, C
  • pesquise por .jpg (ou a extensão de arquivo de suas imagens: .png, .gif, ...)
  • classifica por ordem alfabética (certifique-se de ver o sourcepath do arquivo)
  • exclua os arquivos duplicados dos quais você não precisa mais
por viking 24.10.2014 / 12:55