ディレクトリリストに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

さて、これらすべてのディレクトリを確認する必要があります(リストディレクトリに含まれる)、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)"

関連情報