Bash 스크립트에서 변수 확인

Bash 스크립트에서 변수 확인

아래 스크립트는 제대로 작동하며 로그를 생성합니다.

#!/bin/bash

dir_to_check='/root/file_path.txt'
CY=`date +"%Y"`   
TS=`date "+%Y-%m-%d"`
cmd="/$CY"

cat $dir_to_check | while read output
do
        find ${output}/$cmd -type d -mtime +30 >> /root/file_$TS
        for path in $(cat /root/file_$TS);
                do
        rm -rvf $path | tee -a /root/purge_$TS
        done
done

파일의 예제 위치 , 이러한 모든 경로에는 여러 개의 하위 디렉터리가 있으며 각각 작년 디렉터리와 올해 디렉터리 2023이라는 디렉터리에서 30일 이전 데이터를 삭제 cat /root/file_path.txt해야 합니다 .2022

/data/storage/
/hana/storage/
/SAP/storage/

여기서 문제는 1월부터 2022년 폴더에는 아무것도 삭제되지 않았다는 점입니다. 제거하려면 여러분의 도움이 필요합니다.

배열의 변수를 검증하는 데 도움을 주세요. 아래와 같이 위 스크립트에 다음을 추가하여 현재 연도와 전년도를 배열에 추가하고 싶습니다.

PY=`date +%Y -d "-1 years"`
declare -a arr=("$cmd" "$cmd1")
value=21
cmd1="/$PY"


        find ${output}"${arr[@]}" -type d -mtime +30 >> /root/file_$TS       

                                                       

대신 실수로 처리하십시오.

여기에 이미지 설명을 입력하세요.

지금까지 시도한 내용은 다음과 같습니다.

#!/bin/bash

dir_to_check='/root/file_path.txt'
CY=`date +"%Y"`
PY=`date +%Y -d "-1 years"`
value=21
olddays=`date  --date="21 days ago" +"%Y"`

TS=`date "+%Y-%m-%d"`
cmd="/$CY"
cmd1="/$PY"

cat $dir_to_check | while read output
do
  if [ $PY == $olddays  ];
then
      find ${output}"$cmd1" -type d -ctime +21 >> /root/file_$TS
    else
      find ${output}"$cmd" -type d -ctime +21 >> /root/file_$TS
  fi
done


for path in $(cat /root/file_$TS);
        do
    rm -rvf $path | tee -a /root/purge_$TS
done

관련 정보