2016-12-12 13 views
0

dropbox_uploader.shを使用して自分のDBをバックアップしています。 backupdsは、日付に基づく命名規則によってdropboxに保存されます。dropbox_uploader.shで特定の日付以降にファイルを削除する

DATE=$(date +"%d-%m-%Y_%H%M") 
BKP_FILE="pal_BK_$DATE.sql" 

例えばpal_BK_12-12-2016_1311.sqlである。
dropboxから1か月以上前のバックアップを削除する方法はありますか?

+0

dropbox_uploader.shには、フォルダの内容を一覧表示する機能と、特定の内容を削除する機能があります。あなたは現在の日付を計算しようとしましたか、月を差し引いて、すべてのバックアップをリストアップし、古いものを消去しようとしましたか?あなたはそのプロセスであなたを助けるために私たちを必要としますか、それとも別のやり方でやりたいのですか? –

+0

私は、バックアップファイルの作成日を確認し、古いバックアップを削除する方法について考えています。私は古い*それらを消去する方法を知りませんか?変数(配列)にリストされたドロップボックスフォルダのバックアップファイル名を入れ、その配列をループして古いバックアップを見つける方法はありますか? – alex

+0

現在のDATEを秒に変換する必要があります。その後、./dropbox_uploader.shリスト$ DEST_DIRの各エントリに対して、fileNameに存在する日付を秒に変換し、通常の整数比較を使用します。このプロセスはあなたの現在の日付フォーマットを使用すると非常に迷惑になることがありますので、sort -kMでこのプロセスを行う別の日付フォーマットを検討しますか? –

答えて

2

日付の書式を変更しないと、ファイルの比較が少し奇妙になりますが、これは問題ありません。

アイデアは、現在の日付(形式で)と制限の消去日(1か月前)を秒単位で計算することです。次に、リストされたファイルの各エントリについて、日付を取得し、それを秒に変換し、指定された限界値と比較します。ファイルが十分古い場合は、消去します。

#!/bin/bash 

##################### 
# Convert a given date to s (leaves result in DATE_IN_S) 
##################### 
dateToS() { 
    local date=$1 

    local year=$(echo $date | tr "-" "\t" | tr "_" "\t" | awk {' print $3 '}) 
    local month=$(echo $date | tr "-" "\t" | tr "_" "\t"| awk {' print $2 '}) 
    local day=$(echo $date | tr "-" "\t" | tr "_" "\t" | awk {' print $1 '}) 
    local hour=$(echo $date | tr "-" "\t" | tr "_" "\t" | awk {' print $4 '} | cut -c -2) 
    local minute=$(echo $date | tr "-" "\t" | tr "_" "\t" | awk {' print $4 '} | cut -c 3-) 
    local seconds="00" 

    # Compute the date time in s 
    DATE_IN_S=$(date -d "${year}-${month}-${day} ${hour}:${minute}:${seconds}" +%s) 
} 


##################### 
# MAIN CODE 
##################### 

DEST_DIR= # Dropbox backups base folder 
DATE=$(date +"%Y-%m-%d_%H%M") 
BKP_FILE="pal_BK_${DATE}.sql" 

# Compute the limit date to erase files 
LIMIT_DATE=$(date +%s) 
LIMIT_DATE=$((LIMIT_DATE-2592000)) # 1 month in seconds 

# Retrieve the list of files 
files=$(./dropbox_uploader.sh list $DEST_DIR | awk {' print $3 '} | tail -n +2) 

# Process each file 
for file in $files; do 
    fileDate=$(echo $file | tr "_" "\t" | tr "." "\t" | awk {' print $3"_"$4 '})   

    # Retrieve file date in seconds 
    dateToS $fileDate 

    # Erase the file if it exceeds the limit date 
    #echo "[DEBUG] Comparing ${DATE_IN_S} - ${LIMIT_DATE}" 
    if [ ${DATE_IN_S} -lt ${LIMIT_DATE} ]; then 
    echo "[INFO] Erasing file $file" 
    ./dropbox_uploader.sh delete ${DEST_DIR}${file} 
    fi 
done 

ことに注意してください:

  • 機能dateToSは、我々はdropbox_uploader.shリストを使用して、我々は第三分野をawkはファイルのリストを取得するには秒
  • でそれに相当する特定の日付形式を変換し、 (INFO行)を削除します。
  • わかりやすくするためにいくつかのエコーメッセージを追加しましたが、明示的に削除することもできます(dropbox-uploader.sh呼び出しはサイレントモードでも実行できます) 。
+0

ありがとう、私はすぐにそれを試してみます – alex

+0

[回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を検討してください有用だった。 –

関連する問題