Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具
2018-03-20 18:29
525 查看
查了几十个网页,找到这个接近满意的解决方案
http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft...
不过正则里面的叹号好像不能起到清除空行的效果,改为d;
fdupes--recurseA/B/|sed'/^A/d;/^$/d;s/.*/"&"/'|xargsrm
但还有个小问题,如果A里面有重复的文件,但这文件不在B中,fdupes也是会列为结果,导致误删,要再想想
linux通过md5查找重复文件
md5sum*先查看所有文件的md5值,重复的文件的md5值相同。
uniq处理时是处理相邻两行,所以需要先排序。
因为处理完后会显示md5值影响观看,可以通过awk命令显示文件名
编写脚本文件
此shell工作原理。ls-lS对当前目录所有文件按照文件大小进行排序,并列出文件的详细信息。awk读取ls-lS的输出,对行列进行比较,找出重复文件。
执行逻辑:
将文件依据大小排序并列出,这样大小相近的文件会排列在一起。识别大小相同的文件是我们查找重复文件的第一步。接下来,计算这些文件的校验和。如果校验和相同,那么这些文件就是重复文件,将被删除。
在从文件中读取文本行之前,首先要执行awk(awk是一个强大的文本分析工具)的BEGIN{}语句块.读取文本的工作在{}语句中进行,读取并处理的忣的行后,执行END{}语句块。
使用
如何快速找出Linux中的重复文件
【1】find-not-empty-typef-printf“%s\n”:find是查找命令;-not-empty是要寻找非空文件;-typef是指寻找常规文件;-printf“%s\n”表示的是文件的大小,单位为bytes
【2】sort-rn:这条命令就是按文件大小进行反向排序
【3】uniq-d:uniq是把重复的只输出一次,而-d指只输出重复的部分(如9出现了5次,那么就输出1个9,而2只出现了1次,并非重复出现的数字,故不输出)
【4】xargs-I{}-n1find-typef-size{}c-print0:这一部分分两部分看,第一部分是xargs-I{}-n1,xargs命令将之前的结果转化为参数,供后面的find调用,其中-I{}是指把参数写成{},而-n1是指将之前的结果一个一个输入给下一个命令(-n8就是8个8个输入给下一句,不写-n就是把之前的结果一股脑的给下一句)。后半部分是find-typef-size{}c-print0,find指令我们前面见过,-size{}是指找出大小为{}bytes的文件,而-print0则是为了防止文件名里带空格而写的参数。
【5】
xargs-0md5sum:xargs是将前面的结果转化为输入,那么这个-0表示读取参数的时候以null为分隔符读取,这也不难理解,毕竟null的二进制表示就是00。后面的md5sum是指计算输入的md5值。
【6】uniq-w32–all-repeated=separate最后这里表示对MD5的前32个字节进行对比,以筛选出重复文件
听起来好像比较抽象,其实命令就一条:
find-not-empty-typef-printf“%s\n”表示使用find命令搜索出所有非空文件,再打印出他们的大小
sort-rn命令不用多说了把,这条命令就是按文件大小进行反向排序
uniq-d|xargs-I{}-n1find-typef-size{}c-print0表示只打印了重复的行,这里使用代表打印出文件名相同的文件
uniq-w32–all-repeated=separate最后这里表示对MD5的前32个字节进行对比,以筛选出重复文件
使用命令行的整个过程就是这么简单和容易。
find-name*.mp3-printf"%s\n"|sort-rn|uniq-d|xargs-I{}-n1find-typef-size{}c-print0|xargs-0md5sum|sort|uniq-w32--all-repeated=separate
文件对比以下列顺序开始:
大小对比>部分MD5签名对比>完整MD5签名对比>逐字节对比
在执行以上命令后,让我们使用ls命令验证重复文件是否创建。
上面的脚本创建了15个文件,名称分别为tecmint1.txt,tecmint2.txt……tecmint15.txt,并且每个文件的数据相同,如
2、现在在tecmint文件夹内搜索重复的文件。
3、使用-r选项在每个目录包括其子目录中递归搜索重复文件。
它会递归搜索所有文件和文件夹,花一点时间来扫描重复文件,时间的长短取决于文件和文件夹的数量。在此其间,终端中会显示全部过程,像下面这样。
4、使用-S选项来查看某个文件夹内找到的重复文件的大小。
5、你可以同时使用-S和-r选项来查看所有涉及到的目录和子目录中的重复文件的大小,如下:
6、不同于在一个或所有文件夹内递归搜索,你可以选择按要求有选择性地在两个或三个文件夹内进行搜索。不必再提醒你了吧,如有需要,你可以使用-S和/或-r选项。
7、要删除重复文件,同时保留一个副本,你可以使用
你可能注意到了,所有重复的文件被列了出来,并给出删除提示,一个一个来,或者指定范围,或者一次性全部删除。你可以选择一个范围,就像下面这样,来删除指定范围内的文件。
8、从安全角度出发,你可能想要打印
注意:你应该替换
9、你可以使用
首先列出该目录中的文件。
然后,忽略掉每个匹配集中的首个文件。
dupeGuru团队也开发了名为dupeGuru音乐版的应用来移除重复的音乐文件,和名为dupeGuru图片版的应用来移除重复的图片文件。
1.dupeGuru(标准版)
需要告诉那些不熟悉dupeGuru的人,它是一个免费、开源、跨平台的应用,其用途是在系统中查找和移除重复文件。它可以在Linux,Windows,和MacOSX等平台下使用。通过使用一个快速的模糊匹配算法,它可以在几分钟内找到重复文件。同时,你还可以调整dupeGuru使它去精确查找特定文件类型的重复文件,以及从你想删除的文件中,清除某种文件。它支持英语、法语、德语、中文(简体)、捷克语、意大利语、亚美尼亚语、俄语、乌克兰语、巴西语和越南语。
在Ubuntu14.10/14.04/13.10/13.04/12.04中安装dupeGuru
dupeGuru开发者已经构建了一个UbuntuPPA(PersonalPackageArchives)来简化安装过程。想要安装dupeGuru,依次在终端中键入以下命令:
代码如下:
sudoapt-add-repositoryppa:hsoft/ppa
sudoapt-getupdate
sudoapt-getinstalldupeguru-se
不过正则里面的叹号好像不能起到清除空行的效果,改为d;
fdupes--recurseA/B/|sed'/^A/d;/^$/d;s/.*/"&"/'|xargsrm
但还有个小问题,如果A里面有重复的文件,但这文件不在B中,fdupes也是会列为结果,导致误删,要再想想
linux通过md5查找重复文件
md5sum*|sort|uniq-w32-D|awk-F'''{print$2}'
md5sum*先查看所有文件的md5值,重复的文件的md5值相同。
uniq处理时是处理相邻两行,所以需要先排序。
因为处理完后会显示md5值影响观看,可以通过awk命令显示文件名
awk
-F
''
'{print$2}'
#-F指定分隔符,{print$2}指定第几列
编写脚本文件
#!/bin/bash
#文件名:remove_dupliates.sh
#描述:查找当前目录下重复文件,删除
ls-lS--time-style=long-iso|awk'BEGIN{
getline;getline;
name1=$8;size=$5
}
{
name2=$8;
if(size==$5){
"md5sum"name1|getline;csum1=$1;
"md5sum"name2|getline;csum2=$1;
if(csum1==csum2){
printname1;printname2
}
};
size=$5;name1=name2;
}'|sort-u>duplicate_files
catduplicate_files|xargs-I{}md5sum{}|sort|uniq-w32|awk'{print"^"$2"$"}'|sort-u>duplicate_sample
echoRemoving...
commduplicate_filesduplicate_sample-2-3|tee/dev/stderr|xargsrm
echoRemovedduplicatedfilessuccessfully.
此shell工作原理。ls-lS对当前目录所有文件按照文件大小进行排序,并列出文件的详细信息。awk读取ls-lS的输出,对行列进行比较,找出重复文件。
执行逻辑:
将文件依据大小排序并列出,这样大小相近的文件会排列在一起。识别大小相同的文件是我们查找重复文件的第一步。接下来,计算这些文件的校验和。如果校验和相同,那么这些文件就是重复文件,将被删除。
在从文件中读取文本行之前,首先要执行awk(awk是一个强大的文本分析工具)的BEGIN{}语句块.读取文本的工作在{}语句中进行,读取并处理的忣的行后,执行END{}语句块。
使用
$1,
$2,
$3...$n中获取命令输出中的每一列。我们将文件的md5sum保存在变量csum1和csum2中。变量name1和name2保存文件列表中位置连续的文件名。如果两个文件的校验和相同,那它们肯定是重复文件,其文件名会被打印出来。
如何快速找出Linux中的重复文件
find-not-empty-typef-printf"%s\n"|sort-rn|uniq-d|xargs-I{}-n1find-typef-size{}c-print0|xargs-0md5sum|sort|uniq-w32--all-repeated=separate
【1】find-not-empty-typef-printf“%s\n”:find是查找命令;-not-empty是要寻找非空文件;-typef是指寻找常规文件;-printf“%s\n”表示的是文件的大小,单位为bytes
【2】sort-rn:这条命令就是按文件大小进行反向排序
【3】uniq-d:uniq是把重复的只输出一次,而-d指只输出重复的部分(如9出现了5次,那么就输出1个9,而2只出现了1次,并非重复出现的数字,故不输出)
【4】xargs-I{}-n1find-typef-size{}c-print0:这一部分分两部分看,第一部分是xargs-I{}-n1,xargs命令将之前的结果转化为参数,供后面的find调用,其中-I{}是指把参数写成{},而-n1是指将之前的结果一个一个输入给下一个命令(-n8就是8个8个输入给下一句,不写-n就是把之前的结果一股脑的给下一句)。后半部分是find-typef-size{}c-print0,find指令我们前面见过,-size{}是指找出大小为{}bytes的文件,而-print0则是为了防止文件名里带空格而写的参数。
【5】
xargs-0md5sum:xargs是将前面的结果转化为输入,那么这个-0表示读取参数的时候以null为分隔符读取,这也不难理解,毕竟null的二进制表示就是00。后面的md5sum是指计算输入的md5值。
【6】uniq-w32–all-repeated=separate最后这里表示对MD5的前32个字节进行对比,以筛选出重复文件
使用Find命令
听起来好像比较抽象,其实命令就一条:
find-not-empty-typef-printf"%s\n"|sort-rn|uniq-d|xargs-I{}-n1find-typef-size{}c-print0|xargs-0md5sum|sort|uniq-w32--all-repeated=separate
find-not-empty-typef-printf“%s\n”表示使用find命令搜索出所有非空文件,再打印出他们的大小
sort-rn命令不用多说了把,这条命令就是按文件大小进行反向排序
uniq-d|xargs-I{}-n1find-typef-size{}c-print0表示只打印了重复的行,这里使用代表打印出文件名相同的文件
uniq-w32–all-repeated=separate最后这里表示对MD5的前32个字节进行对比,以筛选出重复文件
使用命令行的整个过程就是这么简单和容易。
find-name*.mp3-printf"%s\n"|sort-rn|uniq-d|xargs-I{}-n1find-typef-size{}c-print0|xargs-0md5sum|sort|uniq-w32--all-repeated=separate
fdupes:Linux中查找并删除重复文件的命令行工具
fdupes是Linux下的一个工具,它由AdrianLopez用C编程语言编写并基于MIT许可证发行,该应用程序可以在指定的目录及子目录中查找重复的文件。fdupes通过对比文件的MD5签名,以及逐字节比较文件来识别重复内容,fdupes有各种选项,可以实现对文件的列出、删除、替换为文件副本的硬链接等操作。文件对比以下列顺序开始:
大小对比>部分MD5签名对比>完整MD5签名对比>逐字节对比
fdupes命令如何使用
1、作为演示的目的,让我们来在某个目录(比如tecmint)下创建一些重复文件,命令如下:$mkdir/home/"$USER"/Desktop/tecmint&&cd/home/"$USER"/Desktop/tecmint&&foriin{1..15};doecho"ILoveTecmint.TecmintisaverynicecommunityofLinuxUsers.">tecmint${i}.txt;done
在执行以上命令后,让我们使用ls
$ls-l
total60
-rw-r--r--1tecminttecmint65Aug811:22tecmint10.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint11.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint12.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint13.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint14.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint15.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint1.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint2.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint3.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint4.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint5.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint6.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint7.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint8.txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint9.txt
上面的脚本创建了15个文件,名称分别为tecmint1.txt,tecmint2.txt……tecmint15.txt,并且每个文件的数据相同,如
"ILoveTecmint.TecmintisaverynicecommunityofLinuxUsers."
2、现在在tecmint文件夹内搜索重复的文件。
$fdupes/home/$USER/Desktop/tecmint
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
3、使用-r选项在每个目录包括其子目录中递归搜索重复文件。
它会递归搜索所有文件和文件夹,花一点时间来扫描重复文件,时间的长短取决于文件和文件夹的数量。在此其间,终端中会显示全部过程,像下面这样。
$fdupes-r/home
Progress[37780/54747]69%
4、使用-S选项来查看某个文件夹内找到的重复文件的大小。
$fdupes-S/home/$USER/Desktop/tecmint
65byteseach:
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
5、你可以同时使用-S和-r选项来查看所有涉及到的目录和子目录中的重复文件的大小,如下:
$fdupes-Sr/home/avi/Desktop/
65byteseach:
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt
107byteseach:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html
6、不同于在一个或所有文件夹内递归搜索,你可以选择按要求有选择性地在两个或三个文件夹内进行搜索。不必再提醒你了吧,如有需要,你可以使用-S和/或-r选项。
$fdupes/home/avi/Desktop//home/avi/Templates/
7、要删除重复文件,同时保留一个副本,你可以使用
-d选项。使用该选项,你必须额外小心,否则最终结果可能会是文件/数据的丢失。郑重提醒,此操作不可恢复。
$fdupes-d/home/$USER/Desktop/tecmint
[1]/home/tecmint/Desktop/tecmint/tecmint13.txt
[2]/home/tecmint/Desktop/tecmint/tecmint8.txt
[3]/home/tecmint/Desktop/tecmint/tecmint11.txt
[4]/home/tecmint/Desktop/tecmint/tecmint3.txt
[5]/home/tecmint/Desktop/tecmint/tecmint4.txt
[6]/home/tecmint/Desktop/tecmint/tecmint6.txt
[7]/home/tecmint/Desktop/tecmint/tecmint7.txt
[8]/home/tecmint/Desktop/tecmint/tecmint9.txt
[9]/home/tecmint/Desktop/tecmint/tecmint10.txt
[10]/home/tecmint/Desktop/tecmint/tecmint2.txt
[11]/home/tecmint/Desktop/tecmint/tecmint5.txt
[12]/home/tecmint/Desktop/tecmint/tecmint14.txt
[13]/home/tecmint/Desktop/tecmint/tecmint1.txt
[14]/home/tecmint/Desktop/tecmint/tecmint15.txt
[15]/home/tecmint/Desktop/tecmint/tecmint12.txt
Set1of1,preservefiles[1-15,all]:
你可能注意到了,所有重复的文件被列了出来,并给出删除提示,一个一个来,或者指定范围,或者一次性全部删除。你可以选择一个范围,就像下面这样,来删除指定范围内的文件。
Set1of1,preservefiles[1-15,all]:2-15
[-]/home/tecmint/Desktop/tecmint/tecmint13.txt
[+]/home/tecmint/Desktop/tecmint/tecmint8.txt
[-]/home/tecmint/Desktop/tecmint/tecmint11.txt
[-]/home/tecmint/Desktop/tecmint/tecmint3.txt
[-]/home/tecmint/Desktop/tecmint/tecmint4.txt
[-]/home/tecmint/Desktop/tecmint/tecmint6.txt
[-]/home/tecmint/Desktop/tecmint/tecmint7.txt
[-]/home/tecmint/Desktop/tecmint/tecmint9.txt
[-]/home/tecmint/Desktop/tecmint/tecmint10.txt
[-]/home/tecmint/Desktop/tecmint/tecmint2.txt
[-]/home/tecmint/Desktop/tecmint/tecmint5.txt
[-]/home/tecmint/Desktop/tecmint/tecmint14.txt
[-]/home/tecmint/Desktop/tecmint/tecmint1.txt
[-]/home/tecmint/Desktop/tecmint/tecmint15.txt
[-]/home/tecmint/Desktop/tecmint/tecmint12.txt
8、从安全角度出发,你可能想要打印
fdupes的输出结果到文件中,然后检查文本文件来决定要删除什么文件。这可以降低意外删除文件的风险。你可以这么做:
$fdupes-Sr/home>/home/fdupes.txt
注意:你应该替换
/home为你想要的文件夹。同时,如果你想要递归搜索并打印大小,可以使用
-r和
-S选项。
9、你可以使用
-f选项来忽略每个匹配集中的首个文件。
首先列出该目录中的文件。
$ls-l/home/$USER/Desktop/tecmint
total20
-rw-r--r--1tecminttecmint65Aug811:22tecmint9(3rdcopy).txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint9(4thcopy).txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint9(anothercopy).txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint9(copy).txt
-rw-r--r--1tecminttecmint65Aug811:22tecmint9.txt
然后,忽略掉每个匹配集中的首个文件。
$fdupes-f/home/$USER/Desktop/tecmint
/home/tecmint/Desktop/tecmint9(copy).txt
/home/tecmint/Desktop/tecmint9(3rdcopy).txt
/home/tecmint/Desktop/tecmint9(anothercopy).txt
/home/tecmint/Desktop/tecmint9(4thcopy).txt
dupeGuru图形工具查找并移除重复文件
对我们来说,磁盘被装满是棘手问题之一。无论我们如何小心谨慎,我们总可能将相同的文件复制到多个不同的地方,或者在不知情的情况下,重复下载了同一个文件。因此,迟早你会看到“磁盘已满”的错误提示,若此时我们确实需要一些磁盘空间来存储重要数据,以上情形无疑是最糟糕的。假如你确信自己的系统中有重复文件,那么dupeGuru可能会帮助到你。dupeGuru团队也开发了名为dupeGuru音乐版的应用来移除重复的音乐文件,和名为dupeGuru图片版的应用来移除重复的图片文件。
1.dupeGuru(标准版)
需要告诉那些不熟悉
在Ubuntu14.10/14.04/13.10/13.04/12.04中安装dupeGuru
dupeGuru开发者已经构建了一个UbuntuPPA(PersonalPackageArchives)来简化安装过程。想要安装dupeGuru,依次在终端中键入以下命令:
代码如下:
sudoapt-add-repositoryppa:hsoft/ppa
sudoapt-getupdate
sudoapt-getinstalldupeguru-se
相关文章推荐
- fdupes:Linux 中查找并删除重复文件的命令行工具
- Linux系统中使用fdupes来查找并删除重复文件
- fdupes查找重复文件、资源工具
- Linux系统中查找、删除重复文件,释放磁盘空间。
- linux文本排序、交集、差集,查找并删除重复文件脚本、comm命令
- Linux系统中查找、删除重复文件,释放磁盘空间。
- Linux 强大的文件查找工具之find
- linux 好工具之 查找 *.* 文件和字段
- linux下删除大数据文件中部分字段重复的行
- Linux 查找指定文件并删除
- 用fdupes删除macbook中的重复文件
- Linux 强大的文件查找工具之find 推荐
- Linux 强大的文件查找工具之find
- Linux 强大的文件查找工具之find
- 五款优秀重复文件查找工具
- lsof查找放进linux回收站中的删除文件,并彻底删除或恢复文件
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
- Linux命令行删除文件到回收站
- 电脑中重复文件怎么删除?教你查找并删除重复文件
- linux 查找命令:删除文件夹以及其子文件夹下所有名字为file的文件发表于