以下代码打印了一长串带有哈希和文件名的文件
md5sum *.java
我尝试列出发生相同哈希值的行未成功,以便我可以删除相同的文件。
如何过滤和删除具有相同内容的相同文件?
答案 0 :(得分:3)
这应该有效:
md5sum *.java | sort | uniq -d -w32
这告诉uniq只比较前32个字符,它只是md5的总和,而不是文件名。
编辑:如果-w不可用,请尝试:
md5sum *.java | awk '{print $1}' | sort | uniq -d
缺点是你不会知道哪些文件有这些重复的校验和...无论如何,如果没有太多的校验和,你可以使用
md5sum *.java | grep 0bee89b07a248e27c83fc3d5951213c1
以后获取文件名(上面的校验和只是一个例子)。我确信有一种方法可以在shell脚本中完成所有这些。
答案 1 :(得分:3)
fdupes
并且对重复项的观点较少使用fdupes
这是一个命令行程序,例如
fdupes -r /home/masi/Documents/ > /tmp/1
less -M +Gg /tmp/1
找到所有重复项并将它们存储在temp中的文件中。
less命令显示所有行的行位置以及您的行程百分比。
我在answer及其明确的维基百科文章here中找到了fdupes
。
您可以通过OSX中的自制程序和Linux中的apt-get
安装它。
fdupes
删除运行
fdupes -rd /home/masi/Documents
让你选择要删除的副本,交互式工作的示例视图:
Set 4 of 2664, preserve files [1 - 2, all]: all
[+] /home/masi/Documents/Exercise 10 - 1.4.2015/task.bib
[+] /home/masi/Documents/Exercise 9 - 16.3.2015/task.bib
[1] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
[2] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf
Set 5 of 2664, preserve files [1 - 2, all]: 2
[-] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
[+] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf
你看到我有2664个重复项。 有一些静态文件可以保存关于我想要的副本的设置,这将是一件好事。我打开了关于这个here的帖子。 例如,我在一些练习和家庭作业中有相同的围兜文件,因此在用户想要复制时不要问第二次。
答案 2 :(得分:2)
更好:
md5sum *.java | sort | uniq -d
只打印重复的行。
答案 3 :(得分:1)
列出所有文件,在重复项之间加一个空行:
$ md5sum *.txt \
| sort \
| perl -pe '($y)=split; print "\n" unless $y eq $x; $x=$y'
05aa3dad11b2d97568bc506a7080d4a3 b.txt
2a517c8a78f1e1582b4ce25e6a8e4953 n.txt
e1254aebddc54f1cbc9ed2eacce91f28 a.txt
e1254aebddc54f1cbc9ed2eacce91f28 k.txt
e1254aebddc54f1cbc9ed2eacce91f28 p.txt
$
仅打印每组中的第一组:
$ md5sum *.txt | sort | perl -ne '($y,$f)=split; print "$f\n" unless $y eq $x; $x=$y'
b.txt
n.txt
a.txt
$
如果你很勇敢,将“除非”改为“如果”,然后再改为
$ rm `md5sum ...`
删除除了每组中的第一个以外的所有