0

2 つの 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 に答える