「example_YY_MM_DD-HH.Zip」という名前のファイルを含むフォルダーがあり、1日に3つのバックアップがあります。私はこれを必要とする:
1)1週間以上前のバックアップの場合、1日に1つだけ必要です(深夜0時(HH))
2)月より古いバックアップの場合、1週間に1つのバックアップのみが必要です。
3)1年以上前のバックアップの場合、1か月に1つのバックアップしか必要ありません(月の最初の日)
私にはこれしかなく、IF部分に何を置くのかわかりません。
ありがとう
#!/bin/sh
export NOW=$(date +"%d-%m-%Y")
export OUTPUT=/media/backup/logs/delete-old.txt
export BACKUP_DIR=
for file in $BACKUP_DIR
do
if $file
fi
done
これは機能するはずです(正しい完全パスまたは相対パスを設定した場合、現在ディレクトリテストにあります)
#! /bin/bash
nowday=$(date +"%d")
nowmonth=$(date +"%m")
nowyear=$(date +"%y")
#number of days since 1 Jan 1970 (today)
nowdays=$(($(date --date="20$nowyear-$nowmonth-$nowday" +"%s")/86400))
backup_dir="test/*"
#echo $backup_dir
for file in $backup_dir
do
hour=${file: -6: -4}
day=${file: -9: -7}
month=${file: -12: -10}
year=${file: -15: -13}
#number of days since 1 Jan 1970 (file)
days=$(($(date --date="20$year-$month-$day" +"%s")/86400))
if ((days < nowdays-365)); then
# more than one year
if ((10#$day == 1))&&((10#$hour == 0)); then
#day is 1 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-31)); then
# more than one month (31 days)
if (((10#$day == 1))||((10#$day == 8))||((10#$day == 15))||((10#$day == 22))||((10#$day == 29)))&&((10#$hour == 0)); then
#day is 1,8,15,22,29 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-7)); then
# more than one week
if ((10#$hour == 0)); then
#hour is zero se this space if you want to copy or something!
:
else
#Wrong hour
rm $file
fi
else
# less than one week (we keep) use this space if you want to copy or something!
:
fi fi fi
done
1か月以上をチェックするために、常に31日間と定義しました。週に一度は1 8 15 22と29日目を選んでいるので、常に月の最初の日があります。これは、各ファイルの深夜をチェックするため、バックカタログでも機能します。
:
行は、コードをそこに置きたい場合のための単なるプレースホルダーです。
エラーが発生した場合に備えて、すべてで実行する前にチェックしてください!
これらはあなたが探しているものを達成するためのいくつかの方法のようです。