如何判断file1是否是file2的前缀?

如何判断file1是否是file2的前缀?

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

答案1

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

cmp -n 124665 file1 file2

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

cmp -n "$(wc -c < file1)" file1 file2

答案2

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

答案3

GNUcmp可以用更简单的方式解决这个问题:

cmp file1 file2

有四种可能的输出(除非出现某种错误)。

  • 无输出:文件是相同的。

  • cmp: EOF on file1: file1 是 file2 的前缀。

  • cmp: EOF on file2: file2 是 file1 的前缀。

  • file1 file2 differ: byte NNN, line MMM: 两者都不是另一个的前缀。

不幸的是,这在脚本中使用有点尴尬,因为这些情况在退出代码中似乎没有区分。此外,EOF on file1消息会发送到 stderr,而file1 file2 differ消息会发送到 stdout。

我认为其他版本也cmp做了类似的事情,但我没有检查过。

相关内容