私は今まで私がしたことを説明しようとします。
まず、次のコードを使用して調査したいディレクトリのリストを作成しました。
$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
さて、これらすべてのディレクトリを確認する必要があります(リストディレクトリに含まれる)、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)"