Unix bash: 文件内容的差异

Unix bash: Differences on file content

想知道有没有什么方法或者Unix命令可以不考虑顺序就知道两个文件的内容是否相同

也就是说下面两个文件内容必须被认为是相同的:

  AAAA
  BBBB

  BBBB
  AAAA

提前致谢!

备注:我知道我可以使用 diffmd5sum 但据我了解他们不考虑我的情况有兴趣。

编辑:因为我需要它来查找在一组数千个文件中是否至少有两个具有相同内容的文件,所以我 post 我使用 @ 编写的 bash 脚本anishsane 给出的答案:

#!/bin/bash
for entry in file-*.smt2 
do
  for entry1 in file-*.smt2
  do
    if [ -f "$entry" ] && [ -f "$entry1" ] && [ "$entry" != "$entry1" ]; then
      file1=`sort $entry | md5sum`
      file2=`sort $entry1 | md5sum`

      if [ "$file1" == "$file2" ]
      then
        echo "Files have the same content"
        echo "$entry $entry1"
        echo "$file1"
        echo "$file2"
        exit -2
      else
        echo "Files $entry and $entry1 have NOT the same content"
      fi


   fi
 done
done

如果您的文件没有排序,您可以使用 sort 命令对它们进行排序。请注意,此命令不会在线对文件进行排序,而是在 stdout.

上打印文件的排序版本

bash 有一个叫做 process substitution 的特征。进程的标准输出(或标准输入)在 /dev/fd/xxx 中用作文件句柄并传递给进程。 (下面示例中的 diff。)

结合这两个,你得到这个解决方案,它使用普通 diff:

diff <(sort file1) <(sort file2)