2

サーバーに次のbashスクリプトがあります。

today=$(date +"%Y-%m-%d")
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

ご覧のとおり、過去 24 時間に変更/作成されたファイルのバックアップが作成されます。ただし、ファイルが見つからない場合は、破損した tar ファイルが作成されます。if..fi ステートメントでラップしたいので、id は空/破損した tar ファイルを作成しません。

誰かがこのスクリプトを変更するのを手伝ってくれますか?

ありがとう

4

4 に答える 4

7

結果がOKかどうかを確認してから、結果が空かどうかを確認できます:

   today=$(date +"%Y-%m-%d")
   results=`find /backups/www -type f -mtime -1`


    if [[ 0 == $? ]] ; then
     if [[ -z $results ]] ; then
      echo "No files found"
     else
      tar uf /daily/backup-$today.tar $results
     fi
    else
     echo "Search failed"
    fi
于 2012-12-12T14:29:19.310 に答える
2
find /backups/www -type f -mtime -1 -exec tar uf /daily/backup-$today.tar {} +

を使用する-execことをお勧めしxargsます。パイプラインは必要なく、スペース、改行、およびその他の特殊な文字を含むファイル名を余分な作業なしで処理します。最後の{}はファイル名のプレースホルダーで+あり、コマンドの終わりを示します-exec( にさらに引数があった場合find)。

おまけとして、ファイルが見つからない場合、コマンドは実行されません。

于 2012-12-12T14:04:45.197 に答える
0

1 つの比較的単純なトリックは次のとおりです。

today=$(date +"%Y-%m-%d")
touch /backups/www/.timestamp
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

そうすれば、常に少なくとも 1 つのファイルを見つけることが保証されます (そして、そのサイズは最小になります)。

于 2012-12-12T15:57:33.373 に答える
0

xargs -r入力がない場合は何もしません。

于 2012-12-12T17:28:32.033 に答える