查找存在于一个目录但不在另一个目录中的文件
我想找到存在于一个目录中但不在另一个目录中的文件,我试着使用这个命令。
diff -q dir1 dir2
上述命令的问题是,它既能找到dir1
中的文件,但又不能找到dir2
中的文件,也能找到dir2
中的文件,但又不能找到dir1
。
我只想找到dir1
中的文件,而不是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
我的另一个问题是,我怎样才能在一个命令中找到dir1
中的文件,而不是dir2
或dir3
中的文件?
295
15
解释:
diff -r dir1 dir2
显示哪些文件只在dir1中,哪些只在dir2中,以及两个目录中的文件是否有变化。diff -r dir1 dir2 | grep dir1
显示哪些文件只在dir1中。awk
只打印文件名。这个应该可以了。
选项解释(通过 diff(1) man page)。
-r
- 递归比较所有找到的子目录。-q
- 只输出文件是否不同。比较的好方法是用
find
和md5sum
,然后用diff
。例子:用
find
列出目录中的所有文件,然后计算diff
。用
find
列出目录中的所有文件,然后计算每个文件的md5哈希值,并将其导入一个文件。对另一个目录进行同样的操作。
然后用"diff"比较结果两个文件。
当要比较的两个目录不在同一台机器上,而你需要确保两个目录中的文件是相等的时候,这个策略就非常有用。
另一个好的方法是使用git来完成这项工作。
问候
Meld (http://meldmerge.org/)在比较目录和其中的文件方面做得很好。
[![Meld比较目录][1]][1]
[1]: http://i.stack.imgur.com/KsNmd.png
vim的DirDiff插件是另一个非常有用的比较目录的工具。
它不仅列出了目录之间哪些文件是不同的,而且还允许你用vimdiff检查/修改不同的文件。
我对所有的回复都不满意,因为大多数回复的速度都很慢,而且对于大的目录会产生不必要的长输出,所以我自己写了一个Python脚本来比较两个文件夹。
与其他许多解决方案不同,它不比较文件的内容。 同时,它也不会进入另一个目录中缺少的子目录。 因此,输出的结果非常简洁,而且脚本的工作速度也很快。
另一种(对于大目录来说可能更快)方法。
sed
命令删除第一个目录组件感谢Erik的帖子这个答案优化了 @Adail-Junior 的一个建议,增加了
-D
选项,当被比较的两个目录都不是 git 仓库时,这个选项很有用。如果你使用
-D
,那么你将看不到与/dev/null
的比较。这有点晚了,但也许能帮到别人。 不知道diff或rsync是否会吐出像这样的裸体格式的文件名。 感谢plhn给出了很好的解决方案,我在下面进行了扩展。
如果你只想要文件名,这样就可以很容易地以干净的格式复制你需要的文件,你可以使用 find 命令。
被接受的答案也会列出存在于两个目录中的文件,但内容不同。 要只列出存在于dir1中的文件,您可以使用。
解释:
kdiff3有一个很好的文件和目录的差异界面。
它适用于Windows、Linux和macOS。
你可以通过多种方式安装它。
brew cask install kdiff3
。这是一个bash脚本,用来打印同步两个目录的命令。
使用DIFF命令比较2个目录的简化方法
运行完成后打开文件名.dat。
你会看到。 只有在filename. 1: filename. 2 仅在: 目录_name: name_of_file1 只有在。 目录_名称。 name_of_file2
GNU
grep
可以用-v
选项进行反向搜索。 这使得grep
报告不匹配的行。 通过这个方法,你可以从 "dir1 "的文件列表中删除 "dir2 "中的文件。