web-dev-qa-db-ja.com

ファイルを削除する方法-ファイル名の日付に基づいて

「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
1
zorbon.cz

これは機能するはずです(正しい完全パスまたは相対パスを設定した場合、現在ディレクトリテストにあります)

#! /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日目を選んでいるので、常に月の最初の日があります。これは、各ファイルの深夜をチェックするため、バックカタログでも機能します。

:行は、コードをそこに置きたい場合のための単なるプレースホルダーです。

エラーが発生した場合に備えて、すべてで実行する前にチェックしてください!

1
Julian Stirling

これらはあなたが探しているものを達成するためのいくつかの方法のようです。

ファイル名の日付に基づいて古いファイルを検索するbashスクリプト

0
TheHerk