Eu baixei muitas imagens em um diretório.
O Downloader renomeou os arquivos que já existem.
Também renomei alguns dos arquivos manualmente.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
Como remover os duplicados? O resultado deve ser:
a.jpg
b.jpg
c.jpg
world.jpg
nota: o nome não importa. Eu só quero arquivos uniq.
echo cksm
logo após a linha que começa comread
se quiser ver o hash de cada arquivo.**
, ele ordena a lista de tal maneira que as duas pastas sejam intercaladas em vez de todas da pasta 1 e depois da pasta 2. O script sempre deixará o primeiro 'original' ele atinge conforme percorre a lista. Você podeecho $file
antes daread
linha para ver se isso é verdade.O fdupes é a ferramenta de sua escolha. Para encontrar todos os arquivos duplicados (por conteúdo, não por nome) no diretório atual:
Para confirmar manualmente a exclusão de arquivos duplicados:
Para excluir automaticamente todas as cópias, exceto a primeira de cada arquivo duplicado ( esteja avisado, este aviso, na verdade, ele exclui arquivos, conforme solicitado ):
Eu recomendo verificar manualmente os arquivos antes da exclusão:
fonte
-d '\n'
fdupes -rdN .
onde -r é recursivo, -d é excluir e -N é sem avisoVocê pode tentar o FSLint . Possui linha de comando e interface GUI .
fonte
Sendo um pouco preguiçoso, não demorei muito para encontrar um online .
Primeiro você precisa criar uma soma de verificação CRC de cada arquivo, pois obviamente você deseja remover apenas duplicatas exatas.
Em seguida, itere sobre essa lista de arquivos, lendo a soma de verificação e também o nome do arquivo. Se duas somas de verificação forem iguais, o arquivo será removido. Isso funciona, pois a classificação é numérica e só classifica nas somas de verificação, que agrupam arquivos duplicados.
Obviamente, isso não funciona recursivamente.
fonte
Como testar arquivos com conteúdo exclusivo?
Como podemos obter a lista de arquivos no diretório?
Podemos obter dois arquivos dessa lista e verificar se os nomes deles são diferentes e o conteúdo é o mesmo.
Por exemplo, temos alguns dir:
Portanto, existem apenas 3 arquivos exclusivos.
Vamos executar esse script:
E temos apenas 3 arquivos com folhas.
fonte
Eu escrevi este pequeno script para excluir arquivos duplicados
https://gist.github.com/crodas/d16a16c2474602ad725b
Basicamente, ele usa um arquivo temporário (
/tmp/list.txt
) para criar um mapa de arquivos e seus hashes. Mais tarde eu uso esses arquivos e a magia dos pipes do Unix para fazer o resto.O script não excluirá nada, mas imprimirá os comandos para excluir arquivos.
mfilter.sh ./dir | bash
Espero que ajude
fonte
Versão mais concisa da remoção de arquivos duplicados (apenas uma linha)
find_same_size.sh
fonte
Encontrei uma maneira mais fácil de executar a mesma tarefa
fonte
A maioria e possivelmente todas as respostas restantes são terrivelmente ineficientes, calculando a soma de verificação de cada arquivo no diretório a ser processado.
Uma abordagem potencialmente mais rápida da ordem de magnitude é obter primeiro o tamanho de cada arquivo, que é quase imediato (
ls
oustat
), e depois calcular e comparar as somas de verificação apenas para os arquivos com tamanho não exclusivo.fonte
Não é isso que você está perguntando, mas acho que alguém pode achar útil quando as somas de verificação não são iguais, mas o nome é semelhante (com sufixo entre parênteses). Este script remove os arquivos com sufixos como ("dígito")
fonte
Encontrei um pequeno programa que realmente simplifica esse tipo de tarefa: fdupes .
fonte