两个目录的不同文件

有两个目录我想比较。 我尝试差异,但它包括文件内的更改。 我想要的就是这样

file a is just in /A file b is missing in /A file c changed directory d is missing in /A directory e is just in /A 

我认为这是常见的做全文件修补,但我不知道一个很好的解决scheme。

你在找

 diff -rq (dir1) (dir2) 

概念validation:

 #!/bin/sh #create our test mkdir -p /tmp/a/b echo "test" >> /tmp/a/c mkdir -p /tmp/a/d/e echo "blah" >> /tmp/a/d/e/f #only exists here mkdir -p /tmp/q/b echo "testing" >> /tmp/q/c #/tmp/a/c shouldnt match mkdir -p /tmp/q/d/e echo "blah" >> /tmp/q/d/e/g #only exists here diff -rq /tmp/a /tmp/q 

结果是 :

 Files /tmp/a/c and /tmp/q/c differ Only in /tmp/a/d/e: f Only in /tmp/q/d/e: g 

你只需要包含-q标志来简化:

 # diff -q dir1 dir2 Files dir1/both and dir2/both differ Only in dir1/: one Only in dir2:/ two 

为了find重复,你使用:

 fdupes -r1 dir1 dir2 

虽然其他人给了你很多好的提示,但你也应该试一试。

如果你使用

 fdupes -rd dir1 dir2 

它会提示你保存哪个文件(其他文件将被删除)。 非常有用的消除重复(我用我的照片做了很好的使用)

注意:是的,我知道这个问题不完全是这个问题,但也许可以帮助他或他人;)

如果你想比较基于文件大小的文件,你可以这样做:

 # ls -al DIR_1 |awk '{print $5, $9}'|sort > 1.txt # ls -al DIR_2 |awk '{print $5, $9}'|sort > 2.txt 

然后:

 # diff 1.txt 2.txt 

找出哪些文件有不同或缺失。 当我必须比较两个目录与​​非常大的文件,以查看哪些文件没有完全下载时,我用这个。

你可以试试ls的差异:

 ls A > a.txt ls B > B.txt diff a.txt b.txt 

不是一个单一的命令,但它应该工作。

经典答案是“dircmp”命令。 它有自己的瑕疵(例如,通过“pr”输出输出到分页),但是如果只给出一个目录或者目录2中的对象列表,然后对于通用文件,则会报告“相同”或'不同'(以及非文件的文件types – 目录等)。

'diff -rq'看起来相当于或者比'dircmp'的输出更好。

我在Stack Overflow上问了一个类似的问题 ,我得到的答案可能是你感兴趣的。 比较两个目录时,我特别感兴趣的是find丢失的文件。

我还指定解决scheme应该处理重命名的文件(例如,如果目录1中的文件A也存在于目录2中,但已被重命名,那么脚本应该知道这一点)。

我select的答案(在顶部)是非常有用的。 这可能是值得一看,作为您的脚本的起点。