私のディレクトリ構造は次のとおりです。
backup-2018-01-12
backup-2018-01-13
backup-2018-01-14
backup-2018-01-15
backup-2018-01-16
backup-2018-01-17
backup-2018-01-18
backup-2018-01-19
backup-2018-01-20
backup-2018-01-21
backup-2018-01-22
backup-2018-01-23
backup-2018-01-24
backup-2018-01-25
backup-2018-01-26
backup-2018-01-27
backup-2018-01-28
backup-2018-01-29
backup-2018-01-30
backup-2018-01-31
backup-2018-02-01
backup-2018-02-02
backup-2018-02-03
backup-2018-02-04
backup-2018-02-05
backup-2018-02-06
backup-2018-02-07
backup-2018-02-08
backup-2018-02-09
backup-2018-02-10
backup-2018-02-11
backup-2018-02-12
backup-2018-02-13
backup-2018-02-14
backup-2018-02-15
スクリプトを使用して最近7日、週間最後のバックアップを最大4週間保存する方法
例えば
だから私は続けます
backup-2018-01-25 <-- this is 3 waeks from now and so on.
backup-2018-02-02 <-- this is 2 weeks earlier from now
backup-2018-02-09
backup-2018-02-10
backup-2018-02-11
backup-2018-02-12
backup-2018-02-13
backup-2018-02-14
backup-2018-02-15
だから私は努力しました
find -type d -name 'backup-*' -mtime +7 -exec rm -v {} \;
これにより、過去7日間は保持されますが、7日より古いすべてのアイテムが削除されます。
ベストアンサー1
簡単な解決策が見つかりませんでした。この問題を解決するために私が見つけた最も簡単な方法は、「削除」リストの代わりに「メンテナンス」リストを使用することです。その後、最後のN個のバックアップとM週間の週間範囲の最新のバックアップをリストに追加できます。 (しばらく前に書いた私のコードでは、月、四半期、年に拡張しました。)明らかにいくつかの重複する部分がありますが、「メンテナンス」リストなのであまり問題になりません。次に、リストにないすべての項目を削除します。まず、リストが空でないことを確認してください。
#!/bin/bash
#
dirs=(
backup-2018-01-12
backup-2018-01-13
backup-2018-01-14
backup-2018-01-15
backup-2018-01-16
backup-2018-01-17
backup-2018-01-18
backup-2018-01-19
backup-2018-01-20
backup-2018-01-21
backup-2018-01-22
backup-2018-01-23
backup-2018-01-24
backup-2018-01-25
backup-2018-01-26
backup-2018-01-27
backup-2018-01-28
backup-2018-01-29
backup-2018-01-30
backup-2018-01-31
backup-2018-02-01
backup-2018-02-02
backup-2018-02-03
backup-2018-02-04
backup-2018-02-05
backup-2018-02-06
backup-2018-02-07
backup-2018-02-08
backup-2018-02-09
backup-2018-02-10
backup-2018-02-11
backup-2018-02-12
backup-2018-02-13
backup-2018-02-14
backup-2018-02-15
)
declare -A list
declare -A keep
####################################################################################
# Go
#
prefix="backup-"
today=$(date +%Y-%m-%d)
# Populate list from set of directories
#
for item in "${dirs[@]}"
do
list[$item]="$item"
done
# Build keep list from business criteria
#
for dayback in {0..6}
do
dateback=$(date --date "$today - $dayback day" +%Y-%m-%d)
keep[$prefix$dateback]=1
done
for weekback in {0..3}
do
dateback1=$(date --date "$today - $weekback week" +%Y-%m-%d)
dateback2=$(date --date "$today - $((weekback + 1)) week" +%Y-%m-%d)
# Look for newest in range
#
newest=
dateback="$dateback1"
while [[ $dateback != $dateback2 ]]
do
[[ -n ${list[$prefix$dateback]} ]] && newest=$dateback && break
dateback=$(date --date "$dateback - 1 day" +%Y-%m-%d)
done
[[ -n $newest ]] && keep[$prefix$newest]=1
done
# We now have a keep list, so delete anything not in that list
#
for item in "${list[@]}"
do
[[ -n ${keep[$item]} ]] && echo "KEEP $item" || echo "DELETE $item"
done
# All done
#
exit 0
満足したら、最後にechoステートメントを変更または拡張して実際の削除を実行してください。