Scripting 检查终端中的副本?

Scripting 检查终端中的副本?,scripting,shell,Scripting,Shell,下面的代码打印了一长串带有哈希和文件名的文件 md5sum *.java 我试图列出出现相同哈希值的行,这样就可以删除相同的文件,但没有成功 如何筛选和删除内容相同的文件?更重要的是: md5sum *.java | sort | uniq -d 只打印重复的行。这应该可以: md5sum *.java | sort | uniq -d -w32 这告诉uniq只比较前32个字符,这只是md5和,而不是文件名 编辑:如果-w不可用,请尝试: md5sum *.java | awk '{pr

下面的代码打印了一长串带有哈希和文件名的文件

md5sum *.java
我试图列出出现相同哈希值的行,这样就可以删除相同的文件,但没有成功

如何筛选和删除内容相同的文件?

更重要的是:

md5sum *.java | sort | uniq -d
只打印重复的行。

这应该可以:

md5sum *.java | sort | uniq -d -w32
这告诉uniq只比较前32个字符,这只是md5和,而不是文件名

编辑:如果-w不可用,请尝试:

md5sum *.java | awk '{print $1}' | sort | uniq -d
缺点是你不知道哪些文件有这些重复的校验和。。。无论如何,如果没有太多的校验和,您可以使用

md5sum *.java | grep 0bee89b07a248e27c83fc3d5951213c1

之后获取文件名(上面的校验和只是一个示例)。我确信在shell脚本中也有一种方法可以完成所有这一切。

这将列出所有文件,并在副本之间留出一行空白:

$ 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
$ 
如果你勇敢,把“除非”改为“如果”,然后

要删除除第一个组以外的所有组,请删除所有组

fdupes
,并减少对重复项的查看 使用
fdupes
,这是一个命令行程序,如

fdupes -r /home/masi/Documents/ > /tmp/1 
less -M +Gg /tmp/1
它将查找所有重复项并将它们存储在temp中的文件中。 less命令以百分比的形式显示所有行的行位置和进程。 我从这篇文章和它清晰的维基百科文章中找到了
fdupes
。 您可以通过OSX中的自制软件和Linux中的apt get安装它

与可能的删除交互使用
fdupes

让您选择要删除或不删除的副本,交互式作品的示例视图:

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个副本。 这将是很好的,有一些静态文件,将保存有关我想要的副本的设置;我打开了一条关于这件事的线索。
例如,我在一些练习和家庭作业中有相同的bib文件,所以当用户想要副本时,不要再问第二次

代码没有给我任何输出。原因可能是,尽管两个文件具有相同的散列,但它们仍然具有不同的名称。我们应该先把名字过滤掉。谢谢!我注意到Mac没有选项-w。我认为原因是他们不希望许多命令具有相同的功能。在没有-w选项的情况下如何解析名称?顺便说一句,在任何人试图强制执行上述md5sum之前,它适用于包含“abc”的文件。)“rm”命令行中的“md5sum…”应该有反勾号,但我无法再次编辑
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