ファイル名の日付に基づいて古いバックアップフォルダを削除する方法

ファイル名の日付に基づいて古いバックアップフォルダを削除する方法

フォルダ名の日付に基づいて別々のバックアップフォルダがあるフォルダとデルタフォルダの2つのフォルダがあります。たとえば、次のようになります。

cd /backup/Full                     
Jul 12 17:52 01-07-2017
Jul 12 18:32 08-07-2017
Jul 15 18:20 15-07-2017
cd /backup/Incremental
Jul 13 12:01 02-07-2017
Jul 13 12:09 03-07-2017
Jul 13 12:14 04-07-2017
Jul 13 12:22 05-07-2017
Jul 13 12:36 06-07-2017
Jul 13 12:47 07-07-2017
Jul 13 12:49 09-07-2017

90日前にフォルダを日付に基づいてフォルダ名で計算するスクリプトを実行したいと思います。2017年1月7日(厳密にフォルダ作成日に関係なく)削除してください。同じ条件で2つのスクリプトを実行する必要があります。最初のものは全体用で、2番目は増分用です。

答え1

探す。 -type d -mtime +90 -exec rm {}\;

  • 現在のディレクトリ(.)から90日(f)を過ぎたファイルを見つけて、削除コマンド(rm)を実行します。

。ディレクトリパスで置き換え可能/

答え2

Bashスクリプトを作成することをお勧めします。

  1. yyyymmdd型のintでソートするフォルダ名を取得します。
  2. currentdate-90 を yyyymmdd 形式の int として計算します。
  3. currentdate-90の下に変数をリストし、dd-mm-yyyy形式に戻ります。
  4. リストされたディレクトリに対してrmを実行します。

しかし、誰かがもっとうまくいくかもしれません。

答え3

@Krzysztof Stasiakが説明した実装は次のとおりです。

まず、いくつかのテストディレクトリを作成します。

cd /backup
mkdir Full/20170{1,7}02
mkdir Incremental/2017010{1..9}
mkdir Incremental/2017070{1..9}

そしてスクリプト:

#! /bin/bash
cd /backup
for P in Full Incremental; do
    cd $P
    for D in *; do
        [ $(date -d '-90 days' +%Y%m%d) -gt $D ] && rm -rf $D
    done
    cd ..
done

テスト用にechobefore を追加することでrm実行されますが、実行されていない操作を確認できます。

ここでは、cdホームディレクトリに移動し、for両方のディレクトリのループを開始します。

cd /backup
for P in Full Incremental; do

次に、「期間」ディレクトリにCDを移動します。

cd $P

その後、forすべてのディレクトリを繰り返します。

for D in *; do

-gt今日減算90日がディレクトリより大きい場合$D

[ $(date -d '-90 days' +%Y%m%d) -gt $D ]

その後、ディレクトリを削除します。

&& rm -rf $D

次のように書くこともできます。

if [ $(date -d '-90 days' +%Y%m%d) -gt $D ]; then
  rm -rf $D
fi

標準バックアップソフトウェアの使用を検討してください。おそらくバクラーでしょう。

関連情報