linux shell, 三行命令:查找并删除重复的文件

35 篇文章 0 订阅
需求:查找并删除某个目录下重复的文件(如果md5sum相同,则认为是相同的文件)。

思路如下:
1. 先计算所有文件的md5sum,并按照md5sum排序,结果放到文件allfiles里
2. 使用uniq命令,去掉allfiles里md5sum相同的记录,结果放到文件uniqfiles里,这样uniqfiles里就是所有不重复的文件列表
3. 比较allfiles和uniqfiles,如果一条记录在allfiles里,但不在uniqfiles里,表明它是重复的,就可以删掉。

对应命令如下:
find /tmp/test -maxdepth 1 -type f -print0 | xargs -0 md5sum | sort > /tmp/allfiles
cat /tmp/allfiles | uniq -w 32 > /tmp/uniqfiles

comm /tmp/allfiles /tmp/uniqfiles -2 -3 | cut -c 35- | tr '\n' '\0' | xargs -0 rm


可以看一下示例:
1. 一共有7个文件,有3个文件是重复的,已经标红:
qingsong@db2a:~$ find /tmp/test -maxdepth 1 -type f -print0 | xargs -0 md5sum | sort | tee /tmp/allfiles
1c600edda8d930678368545d53824dc1 /tmp/test/dir2.tar.gz
1c600edda8d930678368545d53824dc1 /tmp/test/dir2.tar.gz.bak
857a4ddbe2309c203cdd2bb41538a774 /tmp/test/mongodb.rpm
d41d8cd98f00b204e9800998ecf8427e /tmp/test/im age-1.jpg
d41d8cd98f00b204e9800998ecf8427e /tmp/test/im age-2.jpg
d41d8cd98f00b204e9800998ecf8427e /tmp/test/image-3.png

de6e4a0efaf3add0c1b433e0496eabc3 /tmp/test/price.sh

2. 把4个不重复的文件找出来, uniq -w 32表示只比较前32个字符
qingsong@db2a:~$ cat /tmp/allfiles | uniq -w 32 | tee /tmp/uniqfiles
1c600edda8d930678368545d53824dc1 /tmp/test/dir2.tar.gz
857a4ddbe2309c203cdd2bb41538a774 /tmp/test/mongodb.rpm
d41d8cd98f00b204e9800998ecf8427e /tmp/test/im age-1.jpg
de6e4a0efaf3add0c1b433e0496eabc3 /tmp/test/price.sh

3. 查看重复的文件,并删除
"cut -c 35-"取出35列开始的所有的字符,也就是文件名。主要是防止文件名有空格,tr命令也是同样的目地, 参考文章
qingsong@db2a:~$ comm /tmp/allfiles /tmp/uniqfiles -2 -3
1c600edda8d930678368545d53824dc1 /tmp/test/dir2.tar.gz.bak
d41d8cd98f00b204e9800998ecf8427e /tmp/test/im age-2.jpg
d41d8cd98f00b204e9800998ecf8427e /tmp/test/image-3.png
qingsong@db2a:~$ comm /tmp/allfiles /tmp/uniqfiles -2 -3 | cut -c 35- | tr '\n' '\0' | xargs -0 rm
qingsong@db2a:~$ ls /tmp/test/
dir2.tar.gz im age-1.jpg mongodb.rpm price.sh
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值