web-dev-qa-db-ja.com

与えられた2つのファイルが同一であるかどうかをテストする方法は?

コードを更新しました...「else」シーケンスで毎回外に出ます。私のサーバーからupdate.shファイルをダウンロードできます。エコー「ハロー更新」のみが含まれています

更新されたコード(2015年3月11日)

    #/bin/bash
    updateoldmd5=`sed -n l  globalupdate.aix`
    updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`


    if [ $updateoldmd5 =  $updatenewmd5 ]

    then
        apt-get update
        echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
        echo "Done"

    else
        chmod +x /root/update.sh
        ./root/update.sh
        echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
        echo ""
        md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
        echo "Update done"
        #Get new update.sh file for next update check of the node system.
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh

    fi

ちょうどあなたの通知のために。 globalupdate.aixファイルには、以前にダウンロードしたものと比較するために、以前のupdate.shファイルのMDsumのみが含まれています(変更がシステムに適用されているかどうかを確認するため)。このスクリプトは、同じupdate.shファイルを多数のdebianサーバーにdepolyしようとしています...

4
sunwave121

cmpを使用することもできます。マニュアルページから-cmp - compare two files byte by byte。ファイルが一致する場合、0で終了します。

 if cmp -s "$ oldfile" "$ newfile";その後、
 echo "変更なし" 
 else 
 echo "変更あり" 
 fi 
14
Daniel t.

単純にする。 Diffは、差異の場合は1を、差異がない場合は0を返します。 ifステートメントを使用します。 これは、2つのファイルの違いを確認する方法です

if diff file1 file2 > /dev/null
then
    echo "No difference"
else
    echo "Difference"
fi

あなたの問題を修正するには(上の例で2つの変数の違いを比較する場合)、これを使用します(二重の等号は欠けているものです)。

#/bin/bash
updateoldmd5=`sed -n l  globalupdate.aix`
updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`    
if [ "$updateoldmd5" == "$updatenewmd5" ]
then
    apt-get update
    echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
    wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
    echo "Done"
else
    chmod +x /root/update.sh
    ./root/update.sh
    echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
    echo ""
    md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
    echo "Update done"
    #Get new update.sh file for next update check of the node system.
    wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
fi
8
yoshiwaan

それはあなたの最初の変数がコマンドを文字列として含み、戻り値ではないかもしれません。変数1のコマンドの周りの `を忘れたと思います。

0
baduplink

私はあなたのコードを追跡することはできませんが、私が通常使用するコマンドは

cd $DIR_WITH_ONE_FILE
if (cd $DIR_WITH_OTHER_FILE ; md5sum $FILE) | md5sum -c --status
then
    echo "same"
else
    echo "different"
fi

これは、同じ名前で異なるディレクトリにある2つのファイルに依存します。 YMMV。

0
hymie

「diff -s」を試してください

$ echo abc > file1

$ echo abc > file2

$ sha1sum file1 file2
03cfd743661f07975fa2f1220c5194cbaff48451 *file1
03cfd743661f07975fa2f1220c5194cbaff48451 *file2

$ diff file1 file2
# (No output.)

$ diff --report-identical-files file1 file2
Files file1 and file2 are identical

$ diff -s file1 file2
Files file1 and file2 are identical
0
StackzOfZtuff