![我需要检查目录列表是否包含比 1 个月前更新的目录](https://linux22.com/image/33562/%E6%88%91%E9%9C%80%E8%A6%81%E6%A3%80%E6%9F%A5%E7%9B%AE%E5%BD%95%E5%88%97%E8%A1%A8%E6%98%AF%E5%90%A6%E5%8C%85%E5%90%AB%E6%AF%94%201%20%E4%B8%AA%E6%9C%88%E5%89%8D%E6%9B%B4%E6%96%B0%E7%9A%84%E7%9B%AE%E5%BD%95.png)
我将尝试解释到目前为止我所做的事情。
首先,我使用下面的代码构建了我想要调查的目录列表:
$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)"