2

私はbashスクリプトを使い始めており、現在、前回のバックアップ以降にディレクトリが変更された場合にディレクトリをバックアップするスクリプトを作成しています。これを確認するために diff コマンドを使用していますが、正しく使用していない可能性があります。

編集 違いが生じる理由は、ファイル newFile と oldFile がスクリプトを含むディレクトリに作成されており、それがバックアップしようとしているディレクトリと同じであるためです。これらの 2 つのファイル以外の違いを返すように diff を使用するにはどうすればよいですか?

ls -lR $1 > oldFile

while [ 0 ]; 
do

    ls -lR $1 > newFile

    if [ ! diff newFile oldFile ] ; then
  echo "they differ"

else

    echo "they don't differ" 
fi

 done
4

4 に答える 4

1

まず、if ステートメントがまったく機能しません。使用する:

if [ diff oldFile newFile ] ; then
    echo "they differ"
fi

[ ]ブラケットに注意してください!(これらは実際には「括弧」ではないことに注意してください。[はコマンドの省略形であり、testコマンド]の最後の引数です。クレイジーですが、クールです!


使用できます

diff -rN OLD_DIR NEW_DIR

再帰的な差分を取得します。-N新しいファイルも追跡します

また、あなたはinotifywait友達と一緒に見ているかもしれません。inotify は、inode (ファイルやディレクトリなど) が変更されたときにフックを登録できる Linux カーネルのメカニズムです。(および悪魔) を使用inotifywaitすると、目的のファイル/ディレクトリで行われるすべてのファイル操作でトリガーされるシェル スクリプトを登録できます。そのスクリプトでは、変更後に直接バックアップを実行できます(必要な場合)

于 2013-02-03T02:13:29.523 に答える
0

md5deepディレクトリ内のファイルをハッシュし、そのコマンドの出力をハッシュして最終的なチェックサムを取得することもできます。

hash=$(md5deep -rs folder | md5sum)
于 2013-02-03T02:21:54.587 に答える
0

少し検索すると、次のことがわかります。 Bash: if ステートメントでの diff の結果の使用

DIFF=$(diff newfile oldfile) 
if [ "$DIFF" != "" ]; then
    ...
于 2013-02-03T02:14:33.930 に答える
0

コード内の括弧diffは必須ではありません。これは、ifステートメント自体が後続のコマンドの戻りコードをテストするという考え方です。そのため、もう一度電話する必要はありませんtest。次のように書くこともできます。

if diff -q newFile oldFile &> /dev/null ; then...

( /dev/null へのリダイレクト diffは、 - 役に立たない - 出力を返すため、ここにあります)

于 2013-02-03T10:04:01.703 に答える