以下のスクリプトは正常に動作し、ログを生成します。
#!/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