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
的文件,而不是dir2
或dir3
中的文件?
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下工作。