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 次 |
| 最近记录: |