HTTPを介してファイル名の一部の日付に基づいて7日より古いファイルを削除します。

HTTPを介してファイル名の一部の日付に基づいて7日より古いファイルを削除します。

リモートファイルのリストがあります。私はcurlこれらのファイルを使用またはアクセスできますAnsible。リストは次のとおりです。

sqldbd_12_30_2020_14_29_30.tar.gz
sqldbd_12_30_2020_14_52_32.tar.gz
sqldbd_12_31_2020_14_57_49.tar.gz
sqldbp_12_31_2020_16_00_40.tar.gz
sqldbd_01_01_2021_16_29_57.tar.gz
sqldbd_01_02_2021_18_00_35.tar.gz
sqldbd_01_03_2021_20_00_33.tar.gz
sqldbd_01_03_2021_22_00_37.tar.gz
sqldbf_01_04_2021_00_00_37.tar.gz
sqldbc_01_06_2021_02_00_33.tar.gz

日付形式は次のとおりです(カスタム%m_%d_%Y_%H_%M_%S日付形式)。curl DELETE7日後のファイルに対してのみ実行したいと思います。現在、私は次のように書いています。

#!/bin/bash

auth_token=$1
storage_url=$2
compare_date=$(date -d '-7 days' '+%m_%d_%Y_%H_%M_%S')

for line in $(cat backup_list.txt); do

  timestamp=$(echo "${line%.*.*}" | cut -d '_' -f 2,3,4,5,6,7)

  if [[ "$timestamp" < "$compare_date" ]]; then
    curl -k -X DELETE "${storage_url}/sql_backups/$line" -H "X-Auth-Token: ${auth_token}"
  fi
done

残念ながら、期待どおりに動作しなかったため、すべてのファイルが削除されました。バックアップスクリプトが日付文字列を別の形式で生成するように強制できると思います。

ベストアンサー1

varsをyyyymmddhhmmssまたはposixタイムスタンプに変換すると、比較が機能します。 

#!/bin/bash

auth_token=$1
storage_url=$2
# posix epoch
compare_date=$(date -d '-7 days' +'%s')

for line in $(cat backup_list.txt); do

  timestamp=$(echo "${line%.*.*}" | cut -d '_' -f 2,3,4,5,6,7)

  # YYYYMMDD hh:mm:ss
  datetime="${timestamp:6:4}${timestamp:0:2}${timestamp:3:2} ${timestamp:11:2}:${timestamp:14:2}:${timestamp:17:2}"
  # posix epoch
  timestamp=$(date -u -d "$datetime" +'%s')

  if [[ "$timestamp" < "$compare_date" ]]; then
    curl -k -X DELETE "${storage_url}/sql_backups/$line" -H "X-Auth-Token: ${auth_token}"
  fi
done

おすすめ記事