![如何检查文件夹 A 中的每个文件是否存在于文件夹 B 中?](https://linux22.com/image/1475657/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E5%A4%B9%20A%20%E4%B8%AD%E7%9A%84%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E4%BA%8E%E6%96%87%E4%BB%B6%E5%A4%B9%20B%20%E4%B8%AD%EF%BC%9F.png)
我正在重新组织硬盘上的某些文件,并且有一个文件夹的旧副本,我想要做的是确保文件夹 A(旧副本)中的每个文件都存在于文件夹 B 中。每个文件夹至少包含 200 个文件,其中大多数可能是重复的。
警告:我不能只检查文件名,还必须确保它们具有相同的内容(à la fdupes
)。
我检查了手册页,看fdupes
是否有办法进行逆操作(即找出哪些文件不我尝试了多种方法(例如,尝试查找任何副本)但却一无所获,即使该功能存在,我仍然有一些文件只存在于文件夹 B 中。
这两个问题类似,但仅限于 Windows,因此没有太大帮助:
提前致谢。
答案1
如果您已经有重复文件的列表,只需将其与所有文件的列表进行比较即可找到单个文件:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f)
-w
仅计算整个单词(不是子字符串,因此文件abcd
不匹配abc
)-F
认为模式是文字,而不是正则表达式-f
使用指定的文件(-
在本例中为标准输入)作为要匹配的表达式列表。-v
您可能知道,显示不匹配的线条。
这应该输出一个列表,其中包含仅在其中一个文件夹中找到的文件,通过浏览或 grepping 文件夹 A 的名称(下面称为dir1
),应该很容易验证它们都在文件夹 B 中,如下所示:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f) | grep -F dir1