Como apagar arquivos duplicados com o mesmo tamanho e data?

3

Por uma razão que eu não sei, o Postfix decidiu duplicar todos os emails que recebi em uma pasta específica após o meu retorno de férias. Em vez de ter ~ 1000 e-mails nessa pasta, agora tenho 401120! Isso é demais para o Thunderbird, então o cliente de e-mail se recusa a baixar qualquer um deles.

Quando eu ssh no servidor de e-mail, consigo ver o seguinte:

-rw-------   68 user user     1415 Aug  3 17:45 502716210.M218413P5883.mail.domain.com,S=1415,W=1445:2,
-rw-------   68 user user     1415 Aug  3 17:45 502716327.M661584P5946.mail.domain.com,S=1415,W=1445:2,
-rw-------   68 user user     1415 Aug  3 17:45 502716331.M210364P5948.mail.domain.com,S=1415,W=1445:2,
-rw-------   68 user user     1415 Aug  3 17:45 502716412.M161709P6009.mail.domain.com,S=1415,W=1445:2,
-rw-------   42 user user     2393 Aug  3 17:44 502714577.M151447P4492.mail.domain.com,S=2393,W=2447:2,
-rw-------   42 user user     2393 Aug  3 17:44 502715910.M338737P5564.mail.domain.com,S=2393,W=2447:2,
-rw-------   42 user user     2393 Aug  3 17:44 502715914.M370949P5566.mail.domain.com,S=2393,W=2447:2,
-rw-------   42 user user     2393 Aug  3 17:44 502715964.M213570P5615.mail.domain.com,S=2393,W=2447:2,

Eu posso ver que o Postfix deu a todos os arquivos seu próprio nome, mas quando eu olho com o nano, eu posso ver que todos os arquivos com o mesmo tamanho e data são idênticos.

Como posso excluir todos os arquivos duplicados para obter apenas um arquivo para cada data de tamanho?

    
por VincentCrete 14.08.2017 / 19:23

1 resposta

1

copie isso para um arquivo (digamos: kill_dupes) e adicione os direitos de execução (chmod a + x kill_dupes) e execute-o

#!/bin/bash

ls -gGlt | sort -k4,6 -k3,3n > filelist.txt

awk '
BEGIN   {
        printf("#!/bin/bash\n\n");
        filename0 = $7;
        filesize0 = $3;
        filedate0 = $4$5$6;
    }

NF>2    {
        filename1 = $7;
        filesize1 = $3;
        filedate1 = $4$5$6;
        if(filesize1==filesize0 && filedate1==filedate0) {
            printf("rm %s\n", filename1);
        } else {
            filename0 = filename1;
            filesize0 = filesize1;
            filedate0 = filedate1;
        }       
    }
' filelist.txt > rmdupes.sh

verifique o conteúdo do arquivo rmdupes.sh

head rmdupes.sh

confira antes de executá-lo.

502715964.M213570P5615.mail.domain.com, S = 2393, W = 2447: 2 um nome de arquivo real?)

    
por Macsek 14.08.2017 / 22:01