Может быть, название довольно запутанно, поэтому я попытаюсь объяснить, что я сделал до сих пор.
Прежде всего, я создал список каталогов, которые я хочу исследовать, с помощью кода ниже:
$MDIR="/home/user/scripts/fcron" DIRS=`ls -l $MDIR | egrep '^d' | awk '{print $9}' | grep ^$ts-`
Список DIRS теперь содержит имена каталогов формы:
NETGEAR-2013-06-30 NETGEAR-2013-07-01 ........ NETGEAR-2013-05-05
Теперь мне нужно проверить все эти каталоги ( содержащиеся в списке DIRS ), и мне нужно найти тот, который новее, чем за 1 месяц до этого (например, 27 или 29 дней). В случае, если я нахожу одно совпадение, мне нужно выйти из сценария.
В «псевдокоде» я бы написал:
for dir is DIRS: if dir is newer than 30 days old: exit the script else: continue
Моя трудность заключается в переводе только вышеперечисленного «псевдокода» в сценарий bash.
/////Последнее обновление/////
ОК, я обновил часть с псевдокодом следующим образом:
for DIR is $DIRS; do if (( $(stat -c %Y "$dir") < $(date +%s) - 3600*24*30 )); then echo "exiting!!" exit else continue fi done
Но теперь я получаю это:
line 40: syntax error: unexpected word (expecting "do")
Попробуйте сделать это:
dirs='dir1 dir2 dir3' for dir is $dirs; do if (( $(stat -c %Y "$dir") < $(date +%s) - 3600*24*30 )); then exit else continue fi done
Общий подход:
find . -mindepth 1 -maxdepth 1 -type d \ -newermt "$(date --date="1 month ago 00:00" --rfc-3339=seconds)"
Используя ваши DIRS
:
find $DIRS -maxdepth 0 -type d \ -newermt "$(date --date="1 month ago 00:00" --rfc-3339=seconds)"