我有两个文件大小分别为 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
做了类似的事情,但我没有检查过。