我需要检查目录列表是否包含比 1 个月前更新的目录

我需要检查目录列表是否包含比 1 个月前更新的目录

我将尝试解释到目前为止我所做的事情。

首先,我使用下面的代码构建了我想要调查的目录列表:

$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")

答案1

尝试这样做:

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

答案2

一般方法:

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)"

相关内容