O tamanho do arquivo não é uma boa maneira de determinar duplicatas. Você pode ter dois arquivos com o mesmo tamanho, mas com conteúdo diferente. Isso significa que é bem provável que essa abordagem falhe. Dito isto, o seguinte fará o que você pediu.
Importante: isso pressupõe que seus nomes de arquivos não tenham espaços nem novas linhas.
find bad -iname "*.jpg" -printf "%s %f\n" | while read -r bs bf; do
find good/ -iname "*.jpg" -printf "%s %f\n" | while read -r gs gf; do
[ $bs -eq $gs ] && echo "mv good/$gf good/$bf";
done
done
Explicação
-
find bad -iname "*.jpg" -printf "%s %f\n"
: localize todos os arquivos cujo nome termine em.jpg
ou.JPG
no diretóriobad
e imprima seu tamanho e nome de arquivo. -
while read -r bs bf; do
: leia cada linha da saída acima, salvando o tamanho do arquivo como$bs
e seu nome como$bf
. - O segundo
find ... | while ...; done
faz exatamente o mesmo para o diretóriogood
, salvando o tamanho do arquivo como$gs
e seu nome como$gf
. -
[[ $bs -eq $gs ]] && echo "mv good/$gf good/$bf";
: Se o tamanho do arquivo incorreto for o mesmo que o tamanho do arquivo bom, renomeie o arquivo bom usando o nome do arquivo inválido. Se isso acontecer, remova o eco e altere a linha para simplesmentemv good/"$gf" good/"$bf"
. Observe que isso manterá o último nome de arquivo 'incorreto' como o nome final do arquivo 'bom'.
Eu quero enfatizar que isso não é seguro, arquivos diferentes podem ter exatamente o mesmo tamanho e conteúdo completamente diferente. Em vez de usar essa abordagem ingênua, talvez seja melhor usar um programa projetado especificamente para comparar imagens. Eu nunca usei nenhum desses softwares, mas uma pesquisa de 3 minutos apareceu DupeGuru . Eu sugiro que você tente primeiro:
DupeGuru : dupeGuru Picture Edition (PE, abreviado) é uma ferramenta para encontrar imagens duplicadas no seu computador. dupeGuru PE é um irmão mais velho do dupeGuru.
Este software funciona como o dupeGuru, mas é especializado na correspondência de imagens duplicadas. O dupeGuru PE é executado no Windows, Mac OS X e Linux.