linux shell, 三行命令:查找并删除重复的文件
2017-08-26 14:20
513 查看
需求:查找并删除某个目录下重复的文件(如果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
思路如下:
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
相关文章推荐
- linux文本排序、交集、差集,查找并删除重复文件脚本、comm命令
- Linux 按照时间查找文件并删除命令
- linux shell下除了某个文件外的其他文件全部删除的命令
- Linux系统中查找、删除重复文件,释放磁盘空间。
- Linux shell命令 删除除了某个文件之外的所有文件
- Linux 按照时间查找文件并删除命令
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
- Linux系统中查找、删除重复文件,释放磁盘空间。
- shell脚本---查找并删除重复的文件
- Linux 按照时间查找文件并删除命令
- Linux shell命令递归查找某个文件中文字
- Linux 按照时间查找文件并删除命令
- linux shell下除了某个文件外的其他文件全部删除的命令
- Linux 按照时间查找文件并删除命令
- 【6-1-Linux Shell】常用命令之:查找文件命令
- Linux 按照时间查找文件并删除命令
- 公司服务器中了病毒,用了命令查找最近100天的可执行文件,找出病毒文件,并删除
- Linux 按照时间查找文件并删除命令
- 【Linux Shell脚本攻略之一】find命令:文件查找和文件列表
- 一条find命令用法(查找并删除文件)