Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在同一目录中相互比较文件_Bash_Shell_Diff - Fatal编程技术网

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

Bash 在同一目录中相互比较文件,bash,shell,diff,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` 如果只是比较两个文件,请尝试: diff "$source_file" "$dest_file" # wi

我们有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

为了看到假定的差异

您也可以尝试md5sum:

md5sum "$source_file" "$dest_file"

如果有任何建议,请回复

如果你只是想要一个快速的视觉“相同”的答案,我会使用

md5sum file*.txt

将此脚本放在包含
文件*.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相同
file3.txt file1.txt相同
。您可以找出如何避免这种情况。

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

在OSX上测试

md5 -q file*.txt | sort -u

如果您看到不止一行作为输出,那么文件就不一样了。Linux上的工具集似乎与OSX不同。上面的(md5)看起来不错,但不起作用,因为
md5
md5sum
,并在每一行返回选中文件的文件名

我在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

将列出所有副本,但不列出三份副本,依此类推。

如果您只想快速得到“相同”的答案,我会使用
md5sum file*.txt
。你到底需要什么答案?您需要在shell脚本中使用它吗?你想知道什么文件不同吗?@Mathias你能发表你的评论作为答案吗,这解决了我的问题,谢谢。与
diff
文件比较的正常形式是
diff-uNb-oldfile-newfile
选项
-b
-w
控制忽略多少空格差异。选项
-r
控制递归行为。您还可以使用
--label name
在差异标题信息中提供一致的名称。
sum * | sort -r | uniq -d -w 5