2017-09-12 12 views
0

は、これは私のバックアップの構造である:Ubuntuのbashスクリプト、複数のディレクトリから古いバックアップファイルを削除する

  • バックアップがあるディレクトリが毎日作成され、そのディレクトリ内cron_hourly_backup
  • という名前のディレクトリに保存されていますddmmyyyyという形式で名前が付けられています。
章5-6デシベルのcronジョブによって時間ごとにダンプされたバックアップ、および時間ごとのバックアップファイルがあるが、これらのディレクトリのそれぞれにおいて
  • は( db1_000000.zip .... db5_000000.zip db1_230000.zip ... db5_230000.zip点で最大EX)タイムスタンプを使用して一意の名前を持っています

    これで、1日以上経過したすべてのバックアップファイルをプログラムで削除したい(OR、今日と昨日のすべてのバックアップを保つ)が、毎日1つ最新のdb(5 dbsすべて)を保持する。どうすればこれを達成できますか?

    は現在、私はこれをやっている:

    find . -type f \(-name "*_00*" \ 
    -o -name "*_01*"-o -name "*_02*" \ 
    -o -name "*_03*" -o -name "*_04*" \ 
    -o -name "*_05*" -o -name "*_06*" \ 
    -o -name "*_07*" -o -name "*_08*" \ 
    -o -name "*_09*" -o -name "*_10*" \ 
    -o -name "*_11*" -o -name "*_12*" \ 
    -o -name "*_13*" -o -name "*_14*" \ 
    -o -name "*_14*" -o -name "*_15*" \ 
    -o -name "*_16*" -o -name "*_17*" \ 
    -o -name "*_18*" -o -name "*_19*" \ 
    -o -name "*_20*" -o -name "*_21*" \ 
    -o -name "*_22*" \) -delete 
    

    これは素晴らしい作品、問題が

    1. ある23時間営業のバックアップは、任意の日のために利用可能でない場合、私はその日のすべてのファイルを失うことになります。
    2. また、今日と昨日のバックアップも削除されます。

    上記の2つの問題を解決する方法についてのご意見は大変ありがたいです。

    +0

    何が作成後にそれらを修正する:あなたは、あなたはもう一つのループレベル(テストしていません)を使用することができ、1<=N<=6で各dbN_*の最後を維持したいですか? 'find。 -type f -name "db *" -mtime +1 -delete'? – arco444

    +0

    いいえ、しかし5-6 dbがありますので、私はそれらをすべて含めるために*を使用しています – Ash

    +0

    さて、私は第2の問題に-mtimeを使用できます。 1stのための任意の解決策?私は毎日の最新のDBをチェックし、すべてのリメインバックアップを削除したいと思います。 – Ash

    答えて

    0

    わからない "しかし、毎日最新のdb(全5dbs)を維持する"を意味します。

    #/usr/bin/env bash 
    
    declare -a l       # array of backup files 
    bd=cron_hourly_backup    # backup dir 
    td=$(date +"%d%m%Y")    # today 
    yd=$(date -d yesterday +"%d%m%Y") # yesterday 
    for n in "$bd"/*; do 
        if [ ! -d "$n" ]; then 
         continue # skip if not a directory 
        fi 
        if [[ "$n" == "$bd/$td" || "$n" == "$bd/$yd" ]]; then 
         continue # skip if today or yesterday 
        fi 
        l=($(ls "$n")) # populate array 
        # loop over all backup files except the last one 
        for ((i = 0; i < ${#l[@]} - 1; i += 1)); do 
         echo "rm -f $n/${l[i]}" # comment when OK 
    #  rm -f "$n/${l[i]}"  # uncomment when OK 
        done 
    done 
    

    場合:それは意味している場合、あなたはcoreutilsdate有用性を持っている場合は、このようなbashスクリプトは(テストしていない)仕事ができる「毎日のは、(辞書式順序で)ファイルのみ最後を保ちます」

    #/usr/bin/env bash 
    
    declare -a l       # array of backup files 
    bd=cron_hourly_backup    # backup dir 
    td=$(date +"%d%m%Y")    # today 
    yd=$(date -d yesterday +"%d%m%Y") # yesterday 
    for n in "$bd"/*; do 
        if [ ! -d "$n" ]; then 
         continue # skip if not a directory 
        fi 
        if [[ "$n" == "$bd/$td" || "$n" == "$bd/$yd" ]]; then 
         continue # skip if today or yesterday 
        fi 
        for ((j = 1; j <= 6; j += 1)); do 
         l=($(ls "$n/db${j}_"*)) # populate array 
         # loop over all backup files except the last one 
         for ((i = 0; i < ${#l[@]} - 1; i += 1)); do 
          echo "rm -f ${l[i]}" # comment when OK 
    #   rm -f "${l[i]}"  # uncomment when OK 
         done 
        done 
    done 
    
    関連する問題