我在 OSX 上工作,目录中有多个 CSV 文件。我想检查其中是否有两个相同。
我试过了:
cmp file1.csv file2.csv || echo "files are different"
这告诉我前两个文件是不同的。
我也尝试过:
diff -q --from-file *.csv
这告诉我第一的文件与其他文件不同。
但是我怎样才能检查每个文件,而不必手动执行此操作?
答案1
下面的命令在 Linux 上对我有用。我没有 Mac 终端来测试它是否在那里有效。
$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y
8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z
该程序uniq
需要排序的输入。请查看其手册页以了解其他输出选项。
答案2
除了史蒂文的回答之外,您还应该在终端中输入以下内容:
shasum * | sort | uniq
这应该会为您提供结果。
答案3
你真正想要的是一个好的 shell 脚本。一个愚蠢的 shell 脚本应该是这样的:
for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical
当然,这样做的问题是,它会将每个文件与其他所有文件(包括它自己)进行检查,即使已经进行了检查。我相信有一个不错的 awk 脚本可以在更小的空间内完成正确的操作,但我现在感觉不太像 awk。
您可能需要考虑的其他 diff 选项包括:-w(如果空格无关紧要);-b(如果空格的存在很重要但您并不关心有多少空格或空格是什么类型);--strip-trailing-cr(如果某些文件是在认为需要换行符和回车符的系统上创建的)。