11 linux debian bash deduplication find
假设我们有一个/a_long_path_1/foo.doc
大小为 12345 字节的文件,我们希望在目录中找到该文件的所有副本/a_long_path_2
,并/a_long_path_3
递归地包括其所有子目录。副本名称的主要部分可能有所不同foo
(尽管扩展名.doc
可能保持不变),并且创建/修改日期可能不同,但foo
其副本的内容应该相同。
如果我发出find /a_long_path_2 /a_long_path_3 -size 12345c -iname \\*.doc
,我得到的列表太大,无法通过手动检查diff
。需要自动化。可能使自动化变得困难的附加信息:此命令输出中的某些目录名称find \xe2\x80\xa6
包含空格。
需要明确的是:我不希望找到文件系统上所有文件的所有重复项(而是仅找到一个特定文件的所有重复项),甚至不希望作为中间步骤。(无论如何,这样的列表会很大。)
\nKam*_*ski 14
如果我发出
find /a_long_path_2 /a_long_path_3 -size 12345c -iname \*.doc
,我得到的列表太大,无法通过手动检查diff
。需要自动化。
添加-exec cmp -s /a_long_path_1/foo.doc {} \; -print
:
find /a_long_path_2 /a_long_path_3 \
-type f \
-size 12345c \
-iname \*.doc \
-exec cmp -s /a_long_path_1/foo.doc {} \; \
-print
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为 infind
-exec
也是一个测试,当且仅当调用的工具返回退出状态 0 时,它就会成功。当且cmp -s
仅当两个给定文件相同时,它会静默返回退出状态 0。
-iname \*.doc
可以加快速度,但通常它可能会让您错过一些重复项。-type f
并且-size 12345c
肯定是很好的初步测试。
归档时间: |
|
查看次数: |
625 次 |
最近记录: |