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

관련 정보