Encontrar arquivos duplicados (Resolvido)

Iniciado por Mythus, 03 de Julho de 2007, 16:27

tópico anterior - próximo tópico

Mythus

Encontrei um script muito interessante para achar arquivos duplicados http://elonen.iki.fi/code/misc-notes/remove-duplicate-files/index.html . Em uma linha:

OUTF=rem-duplicates.sh; echo "#! /bin/sh" > $OUTF; find "$@" -type f -print0 | xargs -0 -n1 md5sum | sort --key=1,32 | uniq -w 32 -d --all-repeated=separate | sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF; chmod a+x $OUTF; ls -l $OUTF

Ele faz o teste dos arquivos usando o md5sum (excelente idéia - principalmente para arquivos de áudio) e depois lista quem tiver a mesma assinatura, independente do nome que se tenha dado. Ele quase supre minha necessidade. O que eu gostaria é de poder passar passar os diretórios nos quais ele devesse procurar (/home/user1, /var/ftp/pub, /media/winntfs, /media/winfat, etc).

Eu alterei para:
OUTF=rem-duplicates.sh;  echo "Digite o(s) caminho(s) (cuidado com espaços e caracteres especiais):" ; read CAMINHO ; echo "#! /bin/sh" > $OUTF; find $CAMINHO "$@" -type f -print0 | xargs -0 -n1 md5sum | sort --key=1,32 | uniq -w 32 -d --all-repeated=separate | sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF; chmod a+x $OUTF; ls -l $OUTF

Agora minha questão é a seguinte:
O read espera qualquer coisa digitada até o enter, mas não tem o auto-completar pra caminhos longos e se eu digitar um espaço ou uma letra errada, chau. Tem como contornar isso?
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.

Mythus

#1
Basta criar o arquivo .sh e quando executar passar os caminhos para fazer a busca

duplicado.sh
#!/bin/sh
OUTF=rem-duplicates.sh
echo #! /bin/sh > rem-duplicates.sh
find $@ -type f -print0 | xargs -0 -n1 md5sum | sort --key=1,32 | uniq -w 32 -d --all-repeated=separate | sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\1/g;s/(.+)/#rm \1/' >> rem-duplicates.sh
chmod a+x rem-duplicates.sh
ls -l rem-duplicates.sh


chomd +x duplicado.sh
./duplicado.sh /dir1 /dir/2 /d/i/r/3

Os créditos da solução não são completamente meus, tive muitas luzes de um amigo, Andrei Formiga.
(não podia assumir todos os créditos).
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.