我目前在我的 Bash 脚本中遇到问题,并且每次尝试修复它时似乎都在黑暗中运行得更深。
背景:我们有一个文件夹,里面装满了编号的崩溃文件夹,里面装满了崩溃文件。有人每天都在导出这些文件夹的列表。在该导出期间,编号的崩溃文件夹获得属性“user.exported=1”。
其中一些不会被导出,因此它们不会具有该属性,并且只有在它们超过 30 天时才应将其删除。
我的问题:我正在设置一个 bash 脚本,该脚本最终通过 Cron 运行以定期检查文件夹,这些文件夹具有属性“user.exported=1”并且超过 14 天,并通过删除它们rm -rfv FOLDER >> deleted.log
然而,我们也有一些文件夹没有或没有属性“user.exported=1”,然后需要在它们超过 30 天后将其删除。我创建了一个 IF ELIF FI 比较来检查它,但这就是我卡住的地方。
我的代码:
#!/bin/bash
# Variable definition
LOGFILE="/home/crash/deleted.log"
DATE=`date '+%d/%m/%Y'`
TIME=`date '+%T'`
FIND=`find /home/crash -maxdepth 1 -mindepth 1 -type d`
# Code execution
printf "\n$DATE-$TIME\n" >> "$LOGFILE"
for d in $FIND; do
# Check if crash folders are older than 14 days and have been exported
if [[ "$(( $(date +"%s") - $(stat -c "%Y" $d) ))" -gt "1209600" ]] && [[ "$(getfattr -d --absolute-names -n user.exported --only-values $d)" == "1" ]]; then
#echo "$d is older than 14 days and exported"
"rm -rfv $d" >> "$LOGFILE"
# Check if crash folders are older than 30 days and delete regardless
elif [[ "$(( $(date +"%s") - $(stat -c "%Y" $d) ))" -gt "1814400" ]] && [[ "$(getfattr -d --absolute-names -n user.exported $d)" == FALSE ]]; then
#echo "$d is older than 30 days"
"rm -rfv $d" >> "$LOGFILE"
fi
done
IF 部分工作正常,它删除了属性为“user.exported=1”的文件夹,但 ELIF 部分似乎不起作用,因为我只在 bash 中得到输出,例如:
/home/crash/1234: user.exported: No such attribut
./crash_remove.sh: Line 20: rm -rfv /home/crash/1234: File or Directory not found
当我在脚本运行后查看崩溃文件夹时,该文件夹及其内容仍然存在。
我的脚本中肯定有错误,但看不到它。请问有人可以帮我解决这个问题吗?
提前致谢