Linux中两个目录之间的区别

我试图find一个目录中存在的文件,但没有在另一个,我试图使用这个命令:

diff -q dir1 dir2 

上述命令的问题是,它finddir1的文件而不是dir2中的文件以及dir2中的文件,而不是dir1的文件,

我试图finddir1的文件,但不是只在dir2

这里是我的数据看起来像一个小样本

 dir1 dir2 dir3 1.txt 1.txt 1.txt 2.txt 3.txt 3.txt 5.txt 4.txt 5.txt 6.txt 7.txt 8.txt 

我脑海中另一个问题是如何在一个命令中finddir1的文件,而不是dir2dir3中的文件?

 diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt 

说明:

  • diff -r dir1 dir2显示哪些文件只在dir1中,哪些文件在dir2中,以及在两个目录中存在的文件的变化(如果有的话)。

  • diff -r dir1 dir2 | grep dir1 diff -r dir1 dir2 | grep dir1显示哪些文件只在dir1中

  • awk只打印文件名。

这应该做的工作:

 diff -rq dir1 dir2 
 comm -23 <(ls dir1 |sort) <(ls dir2|sort) 

这个命令会给你的文件在dir1 而不在dir2中。

关于<( )标志,你可以谷歌它作为'进程替代'。

做这个比较的一个好方法是使用md5sum find ,然后是diff

例:

使用find来列出目录中的所有文件,然后计算每个文件的md5散列并将其传送到一个文件:

 find /dir1/ -type f -exec md5sum {} \; > dir1.txt 

对另一个目录执行相同的过程:

 find /dir2/ -type f -exec md5sum {} \; > dir2.txt 

然后用“diff”比较结果两个文件:

 diff dir1.txt dir2.txt 

当要比较的两个目录不在同一台机器上时,此策略非常有用,并且您需要确保两个目录中的文件相同。

做这个工作的另一个好方法是使用git

 git diff --no-index dir1/ dir2/ 

最好的祝福!

vim的DirDiff插件是比较目录的另一个非常有用的工具。

 vim -c "DirDiff dir1 dir2" 

它不仅列出目录中的哪些文件不同,还允许您使用vimdiff检查/修改不同的文件。

Meld( http://meldmerge.org/ )在比较目录和其中的文件方面做得很好。

融合比较目录

这有点晚,但可能有助于某人。 不知道diff或者rsync只是以这种裸露的格式吐出文件名。 感谢plhn给予我在下面扩展的那个好的解决scheme。

如果你只想要文件名,所以只需要以干净的格式复制你需要的文件,你可以使用find命令。

 comm -23 <(find dir1 | sed 's/dir1/\//'| sort) <(find dir2 | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/' 

这假定dir1和dir2都在同一个父文件夹中。 sed只是删除父文件夹,所以你可以比较苹果和苹果。 最后一个sed只是把dir1的名字放回去。

如果你只是想要文件:

 comm -23 <(find dir1 -type f | sed 's/dir1/\//'| sort) <(find dir2 -type f | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/' 

类似的目录:

 comm -23 <(find dir1 -type d | sed 's/dir1/\//'| sort) <(find dir2 -type d | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/' 

另一个(也许更快的大型目录)方法:

 $ find dir1 | sed 's,^[^/]*/,,' | sort > dir1.txt && find dir2 | sed 's,^[^/]*/,,' | sort > dir2.txt $ diff dir1.txt dir2.txt 

sed命令删除了第一个目录组件, 感谢Erik的文章 )

接受的答案也将列出两个目录中存在的文件,但具有不同的内容。 仅列出dir1中存在的文件,您可以使用:

 diff -r dir1 dir2 | grep 'Only in' | grep dir1 | awk '{print $4}' > difference1.txt 

说明:

  • diff -r dir1 dir2:比较
  • grep'Only in':获取包含'Only in'
  • grep dir1:获取包含dir的行

使用DIFF命令比较2个目录的简化方法

diff filename.1 filename.2> filename.dat >> Enter

运行完成后打开filename.dat

你会看到:只在filename.1:filename.2只在:directory_name:name_of_file1只在:directory_Name:name_of_file2

kdiff3有一个不错的界面文件和目录。

检查URL: http : //kdiff3.sourceforge.net

它在Windows和Linux下工作。