Deduplicar arquivos de imagem

1
[user@notebook foobar]$ ls *.jpg|wc -l
1959
[user@notebook foobar]$ cksum * | cut -d' ' -f-2 | sort | uniq -di | wc -l
698
[user@notebook foobar]$ 

Existem muitos arquivos jpg em um diretório. Muitos dos arquivos são duplicados, mas eu posso identificá-los se o cksum é o mesmo para eles. Às vezes há 2 ou 3 arquivos da mesma imagem.

P: Como posso excluir as duplicatas desnecessárias?

Preciso deixar 1 de cada foto, portanto, se houver exatamente três fotos iguais com nomes de arquivo diferentes, somente uma delas deverá permanecer , para que não haja duplicatas da foto, como faça isso?

    
por pepite 14.11.2016 / 22:52

2 respostas

1

Use fdupes:

fdupes -dN .

man fdupes:

   -d --delete
          prompt user for files to  preserve,  deleting  all  others  (see
          CAVEATS below)

   -N --noprompt
          when  used  together  with  --delete, preserve the first file in
          each set of duplicates and delete the others  without  prompting
          the user
    
por 14.11.2016 / 22:56
0

Esse script usa uma matriz associativa no bash para salvar somas de verificação e, em seguida, relatar duplicatas; mude o echo para ser rm se estiver com boa aparência (ou rm -i para mais paranóia):

#!/usr/bin/env bash
declare -A sums
for f in *
do
  if [[ ! -f "$f" ]]; then continue; fi
  c=$(cksum "$f" | awk '{print $1}')
  [[ -n "${sums[$c]}" ]] && echo "# rm \"$f\" -- duplicate of ${sums[$c]}"
  sums[$c]="$f"
done
    
por 14.11.2016 / 23:03