比较同一目录中的文件

Compare files with each other within the same directory

我们有 20 个名为 file*.txt 的文件都在一个目录中:

file1.txt
file2.txt
...
file20.txt

在同一目录中还有其他文件,我们需要忽略:

someotherfile.csv
somemore.txt
etc.pdf

需要查看文件内容是否相同。尝试使用diff,显然失败了:

diff -r ./file*.txt ./file*.txt`

如果您只是比较两个文件,请尝试:

diff "$source_file" "$dest_file" # without -q

cmp "$source_file" "$dest_file" # without -s

为了查看假定的差异。

你也可以试试 md5sum:

md5sum "$source_file" "$dest_file"

如有任何建议请回复...!

如果您只想快速查看 "are the same" 答案,我会使用;

md5sum file*.txt

把这个脚本放在有file*.txt和运行的目录下

#!/bin/bash
FILES=./file*.txt
for filename in $FILES; do
    for other in $FILES; do
        if [ "$filename" != "$other" ]
        then
            cmp -s $filename $other
            retval=$?
            if [ $retval -eq 0 ]
            then
                echo "$filename $other are same"
            fi
        fi
    done
done

它会同时打印 file1.txt file3.txt are samefile3.txt file1.txt are same。你可以弄清楚如何避免这种情况。

一个相对简单的一行可能就足够了:

测试于 OSX、

md5 -q file*.txt | sort -u

如果您看到多行输出,则文件不相同

Linux 似乎有一套与 OSX 不同的工具。上面的 (md5) 看起来不错,但不起作用,因为 md5md5sum 和 returns 每行检查文件的文件名。

我在 RH 上的版本 linux:

首先创建相等的文件:

for i in `seq -w 1 20` ; do echo one > test${i}.txt ; done

然后运行这个:

md5sum *.txt | cut -d ' ' -f 1 | sort -u

| wc -l什么的,你可以找到行数。我个人会走这条路。

sum * | sort -r | uniq -d -w 5

将列出所有重复项,但不会列出一式三份等。