디렉터리 목록에 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)"

관련 정보