0

我有两个 linux 目录 dir1 和 dir2 两个都有一些文件。现在我想要与 dir1 相比,在 dir2 中添加文件和删除文件的文件名列表。文件应根据文件中的数据或内容进行比较。我是 linux bash 脚本的新手。请帮我。

目前我这样做如下:

find dir1 -iname *.c -o -iname *.h -o -iname *.prm | xargs -n1 md5sum > dir1.fingerprint.md5sum
find dir2 -iname *.c -o -iname *.h -o -iname *.prm | xargs -n1 md5sum > dir2.fingerprint.md5sum
cat dir1.fingerprint.md5sum | cut -d" " -f1 | sort -u > dir1.fingerprint
cat dir2.fingerprint.md5sum | cut -d" " -f1 | sort -u > dir2.fingerprint
diff -NrU 2 dir1.fingerprint dir2.fingerprint

我得到的结果是一些更改 id,如下所示:

--- dir1.fingerprint    2013-03-08 11:57:24.421311354 +0530
+++ dir2.fingerprint    2013-03-08 11:57:34.901311856 +0530
@@ -1,3 +1,3 @@
-43551a78e0f5b0be4aec23fdab881e65
-4639647e4f86eb84987cd01df8245d14
4c9cc7c6332b4105197576f66d1efee7
+9f944e70cb20b275b2e9b4f0ee26141a
+d41d8cd98f00b204e9800998ecf8427e

我希望将结果作为修改或新添加到 dir2 的文件的文件名。如何得到这个。请帮我。

4

1 回答 1

0

使用参数 dir2 和 dir1 试试这个脚本

#!/bin/sh
if [ "x$1" == "x" ]
then
exit 0
fi
if [ "x$2" == "x" ]
then
exit 0
fi
#echo "DIFF $1 $2"
if [ -f $1 ]
then
        if [ -e $2 ]
        then
                diff $1 $2 >/dev/null
                if [ "$?" != "0" ]
                then
                        echo "DIFFERENT $1"
                fi
        fi
        exit 0
fi
if [ "x`ls $1`" != "x" ]
then
        for f in `ls $1`
        do
                $0 $1/$f $2/$f
        done
fi
exit 0

编辑:

if [ "x`ls $1`" != "x" ]
then
        for f in `ls $1`
        do
           if [ -f $1/$f ]
           then
              for g in `ls $2`
              do
                  if [ -f $2/$g ]
                  then
                      diff $1/$f $2/$g >/dev/null
                      if [ "$?" == "0" ]
                      then
                          echo "SAME CONTENT $1/$f $2/$g"
                      fi
                  fi
              done
           fi
        done
fi
于 2013-03-08T07:28:23.213 回答