在同一目录中相互比较文件

时间:2015-04-16 09:13:16

标签: bash shell diff

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

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

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

someotherfile.csv
somemore.txt
etc.pdf

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

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

6 个答案:

答案 0 :(得分:4)

如果你只是想要一个快速视觉"是相同的"回答,我会用;

md5sum file*.txt

答案 1 :(得分:2)

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

在OSX上测试,

md5 -q file*.txt | sort -u

如果您看到多行作为输出,则文件不一样

答案 2 :(得分:0)

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

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

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

为了看到所谓的差异。

你也可以试试md5sum:

md5sum "$source_file" "$dest_file"

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

答案 3 :(得分:0)

将此脚本放在具有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。你可以弄清楚如何避免这种情况。

答案 4 :(得分:0)

Linux似乎拥有与OSX不同的工具集。上面的(md5)看起来很不错,但不起作用,因为md5md5sum并且返回每行上已检查文件的文件名。

我在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或其他内容,您可以找到行数。我亲自走这条路。

答案 5 :(得分:0)

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

将列出所有重复项,但不列出重复项,依此类推。