Encontre duplicatas por filemane

1

Eu tenho cerca de 167k arquivos em pasta única (por enquanto) e renomeado por este script aqui: Renomeando um monte de arquivos, mas apenas parte do título .
Como posso encontrar arquivos duplicados por seus nomes (apenas dígitos nesse ponto específico) e excluir o arquivo mais antigo:
Aaaaaaa.bbb - 0000125 tag tag_tag 9tag Aaaaaaa.bbb - 0000002 tag 9tag Aaaaaaa.bbb - 0000002 tag tag_tag 9tag

Todas as ferramentas que eu usei não ofereciam tal funcionalidade, então apenas o script pode ajudar.

    
por Ceslovas 05.11.2015 / 23:29

1 resposta

0

Abaixo, segue um find , sort e awk one-liner.

A idéia básica é listar arquivos, classificá-los numericamente (o que funciona, a menos que Aaaaaaa.bbb e tags sejam números), e então deixar o awk armazenar cada terceiro campo de nomes de arquivos em prev variable e compará-lo com o atual valor do campo 3. Se eles corresponderem, imprima uma mensagem.

find . -type f -print | sort --numeric | awk '{if(prev == $3) print $0" is duplicate of "$prevEntry}{ prev=$3; prevEntry=$0}'

Abaixo está uma pequena demonstração:

    $ seq 6 10 | xargs printf "%07d\n" | xargs -I {} touch "Aaaaaaa.bbb - {} tag 9tag" 

    $ seq 00001 00020 | xargs printf "%07d\n" | xargs -I {} echo "Aaaaaaa.bbb - {} tag tag_tag 9tag"

$ find . -type f -print | sort --numeric | awk '{if(prev == $3) print $0" is duplicate of "$prevEntry}{ prev=$3; prevEntry=$0}'

    ./Aaaaaaa.bbb - 0000006 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000006 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000007 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000007 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000008 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000008 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000009 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000009 tag tag_tag 9tag
    ./Aaaaaaa.bbb - 0000010 tag tag_tag 9tag is duplicate of ./Aaaaaaa.bbb - 0000010 tag tag_tag 9tag
    
por Sergiy Kolodyazhnyy 06.11.2015 / 01:50