Esta é uma abordagem lenta, mas segura e muito simples, que deve ser executada tanto no OSX quanto no Linux. Estou assumindo que você está interessado em arquivos duplicados que residem no seu $HOME
, mas você pode alterar isso para atender às suas necessidades.
A idéia é primeiro encontrar uma lista de todos os diretórios, então comparar os arquivos dentro deles e deletar quaisquer que sejam idênticos. Como eu disse, isso é muito simplista, então apenas manterá o primeiro de qualquer par de arquivos e excluirá o resto sem aviso prévio.
Isso imprimirá os enganos, mas não fará alterações nos seus arquivos:
find $HOME -mindepth 1 -type d | while read dir; do
find $dir -type -f -exec md5sum {} \; | sort > md5sums;
gawk '{print $1}' md5sums | sort | uniq -d > dupes;
while read d; do
echo "---"; grep -w $d md5sums | cut -d ' ' -f 2-;
done < dupes
done; rm dupes md5sum
Este irá excluir silenciosamente os arquivos duplicados, somente executá-lo se tiver certeza de que está OK :
find $HOME -mindepth 1 -type d |
while read dir; do
find $dir -type -f -exec md5sum {} \; | sort > md5sums;
gawk '{print $1}' md5sums | sort | uniq -d |
while read d; do grep -w $d md5sums | cut -d ' ' -f 2- | tail -n +2; done |
| xargs rm ;
done; rm dupes md5sum
CAVEATS: Isso é lento, na verdade SLOW, não emitirá avisos e excluirá os arquivos silenciosamente. No lado positivo, isso só acontecerá se esses arquivos estiverem no mesmo diretório que você deseja.