如何检查file1是否是file2的前缀?

tvo*_*rog 13 files file-comparison

我有两个大小分别为 124665 和 124858(以字节为单位)的文件,我想检查 file1 是否是 file2 的前缀。

Jos*_* R. 11

假设您file1在变量中有大小FILE1_SZ并且您的head实现支持(非标准)-c选项:

if head -c "$FILE1_SZ" file2 | cmp -s - file1; then
    echo "file1 is a prefix of file2"
else
    echo "file1 is not a prefix of file2"
fi
Run Code Online (Sandbox Code Playgroud)

  • 因为 `cmp` 会进行简单的字节到字节的比较,并在发现差异后立即返回,而 `diff` 是一个文本实用程序,它将使用复杂的算法向您显示两个文件之间的所有差异不在乎。 (7认同)

ste*_*ver 11

如果您的系统有cmp来自 GNU的命令diffutils,那么一种选择是

cmp -n 124665 file1 file2
Run Code Online (Sandbox Code Playgroud)

最多比较两个文件的前 124665 个字节并报告它们是否不同 - 或者更一般地说

cmp -n "$(wc -c < file1)" file1 file2
Run Code Online (Sandbox Code Playgroud)

  • 不,大多数`wc` 实现会优化这种情况并执行`fstat()`(或/和`lseek(SEEK_END)`),因此将尽可能高效。另一方面,`stat -c` 是 GNU 特定的。 (2认同)