Autor Tópico: Encontrar arquivos duplicados (Resolvido)  (Lida 4531 vezes)

Offline Mythus

  • Usuário Ubuntu
  • *
  • Mensagens: 264
  • Liga dos Dinos
    • Ver perfil
    • http://www.protopage.com/skopein
Encontrar arquivos duplicados (Resolvido)
« Online: 03 de Julho de 2007, 16:27 »
Encontrei um script muito interessante para achar arquivos duplicados http://elonen.iki.fi/code/misc-notes/remove-duplicate-files/index.html . Em uma linha:

Código: [Selecionar]
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:
Código: [Selecionar]
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?
« Última modificação: 03 de Julho de 2007, 18:06 por Mythus »
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.

Offline Mythus

  • Usuário Ubuntu
  • *
  • Mensagens: 264
  • Liga dos Dinos
    • Ver perfil
    • http://www.protopage.com/skopein
Re: Encontrar arquivos duplicados (resolvido)
« Resposta #1 Online: 03 de Julho de 2007, 18:06 »
Basta criar o arquivo .sh e quando executar passar os caminhos para fazer a busca

duplicado.sh
Código: [Selecionar]
#!/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).
« Última modificação: 03 de Julho de 2007, 18:13 por Mythus »
Abraços,
_________________
Não é programador, não é hacker. Formado em Direito pela UFPb. Usuário de Linux em tempo integral: Linux User Number: 174012.