아래 스크립트는 제대로 작동하며 로그를 생성합니다.
#!/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