我想出了如何比较两个文件并使用它的状态代码来查看文件是否相同。问题是,它只有在比较区分大小写时才有效。我使用了cmp命令的状态代码。
我怀疑我要使用globbing(即“ [Aa] [Bb] [Cc] [等等......] ”)。但我不知道如何将其实现到cmp命令中。
答案 0 :(得分:3)
在对案例进行规范化后,使用diff
比cmp
快得多:
#!/bin/bash
# ^-- must not be /bin/sh, as process substitution is a bash/ksh/zsh feature
if cmp -s <(tr [a-z] [A-Z] <file1) <(tr [a-z] [A-Z] <file2); then
echo "files are the same"
else
echo "files differ"
fi
cmp -s
特别快,因为它可以在找到第一个差异后立即退出。
这也更节省内存 - 它通过tr
操作(在任何给定时间存储不超过一个缓冲区,每个文件的价值)流入内容到{{1} (同样,它只需要存储足以立即缓冲和比较)。与cmp
类型算法相比较,该算法需要能够在文件中寻找相似的部分,因此IO或内存要求远远超出diff
O(1)
的使用范围
答案 1 :(得分:2)
有用于比较shell中2个文件的实用程序。
diff -i file1 file2