Я в настоящее время застрял с проблемой в моем Bash сценарии и, кажется, работает все глубже в темноте с каждой попыткой исправить это.
Справочная информация: у нас есть папка, которая заполняется с пронумерованными папками cra sh, которые заполняются файлами cra sh. Кто-то экспортирует список этих папок ежедневно. Во время этого экспорта нумерованные папки cra sh получают атрибут «user.exported = 1».
Некоторые из них не экспортируются, поэтому они не будут иметь атрибута, и их следует удалять, только если они старше 30 дней.
Моя проблема: я настраиваю скрипт bash, который в конце концов запускается через Cron, чтобы регулярно проверять папки, которые имеют атрибут "пользователь" .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
Когда я смотрю в cra sh папка после запуска скрипта, папка и ее содержимое все еще там.
У меня определенно есть ошибка в моем скрипте, но я не вижу ее. Пожалуйста, кто-нибудь может мне помочь с этим?
Заранее спасибо