2017-10-02 3 views
0

を返すとコマンドを見つけます。 古いバックアップを検索すると(180日を超える)、findコマンドはそれらを削除します。-deleteはいつも私がバックアップデータベースに、クーロンで使用する小さなbashスクリプトを書いて、ステータスコード0

それはそれらを削除しますが、ないの両方(最初に起こるはずそれはありませんし、削除するものがないとき、それは何も削除していないにも関わらず、常に0を返す0

#!/bin/bash 

# Vars 
TODAY=$(date +%d%m%y) 
BDIR=/backup/ 
FLOG="/var/log/mydb_backup.log" 

# Backing up the db 
su -c "pg_dump --format=c --file=${BDIR}mydb_db_backup.${TODAY} mydb" postgres 
if [ $? -eq 0 ]; then 
    LOG="mydb DB of ${TODAY} backed up!" 
else 
    LOG="Problem to back up mydb DB of ${TODAY}" 
fi 


# Delete db backup older than 180+ days 
find ${BDIR} -type f -mtime +180 -delete 
if [ $? -eq 0 ]; then 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 

# Writing result 
echo ${LOG} >> ${FLOG} 

echo $?を返すとき月のみ)。 私が間違っていることはありますか?

+0

クロスサイト複製:https://serverfault.com/questions/225798/can-i-make-find-return-non-0-when-no-matching-files-are-found –

+0

これは、削除しないためです何もエラーではありません。 'find'は、削除されたファイルの数を返しませんが、実行中に発生したエラーを表すステータスコードを返します。エラーなしで実行されたので、期待通りに0を返しました。 – litelite

+0

真..それは、削除に関してではなく、見つけたことを完全に忘れていました。みんなありがとう!私は何とかそれを修正する;) – Nihvel

答えて

1

よしが...これは私が現時点で考えることができる最高のソリューションです:

# Delete db backup older than 180+ days 
find ${BDIR} -maxdepth 1 -type f -mtime +180 -printf "%f\n" > $FDEL 
if [[ $? -eq 0 && $(wc -l <"$FDEL") -gt 0 ]]; then 
    cd $BDIR 
    xargs -d '\n' -a $FDEL rm 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 
rm $FDEL 

私はバックアップフォルダに移動し、ファイルのそれぞれを削除し、ファイルに結果(複数可)を印刷しますリストに見つかりました。 作成されるファイルは0バイトより大きくなければなりません。これは空ではないことを意味し、内部のものを削除する必要があります。

関連する問題