如何删除相同大小和日期的重复文件?

如何删除相同大小和日期的重复文件?

出于某种我不知道的原因,Postfix 决定在我休假回来后将我收到的所有电子邮件复制到一个特定的文件夹中。该文件夹中的电子邮件数量从原来的约 1000 封增加到 401120 封!这对 Thunderbird 来说太多了,因此邮件客户端拒绝下载任何电子邮件。

当我通过 ssh 进入邮件服务器时,我可以看到以下内容:

-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,

我可以看到 Postfix 为所有文件赋予了自己的名字,但是当我用 nano 查看时,我可以看到所有具有相同大小和日期的文件都是相同的。

我如何删除所有重复的文件,以便每个大小日期只获取一个文件?

答案1

将其复制到文件(例如:kill_dupes)并添加运行权限(chmod a + x kill_dupes)并运行它

#!/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

然后验证内容rmdupes.sh文件

head rmdupes.sh

请在实际运行之前进行检查。

(是502715964.M213570P5615.mail.domain.com,S=2393,W=2447:2实际的文件名?

相关内容