Eu preciso verificar uma lista de diretórios se contiver um diretório mais novo que 1 mês antes

0

Talvez o título seja um pouco confuso, por isso vou tentar explicar o que fiz até agora.

Primeiro de tudo eu construí a lista de diretórios que eu quero investigar com o código abaixo:

$MDIR="/home/user/scripts/fcron"
DIRS='ls -l $MDIR | egrep '^d' | awk '{print $9}' | grep ^$ts-'

A lista DIRS agora contém o diretório nomes do formulário:

NETGEAR-2013-06-30
NETGEAR-2013-07-01
........
NETGEAR-2013-05-05

Agora, preciso verificar todos esses diretórios ( contidos na lista DIRS ) e preciso encontrar um que seja mais recente do que 1 mês antes (por exemplo, 27 ou 29 dias). Caso eu encontre uma correspondência, preciso sair do script.

No 'pseudocode' eu escreveria:

for dir is DIRS:
    if dir is newer than 30 days old:
       exit the script
    else:
       continue

Minha dificuldade está em traduzir apenas o 'pseudocódigo' acima em um script bash.

///// Última Atualização /////

OK, atualizei a peça com o pseudocódigo com isto:

    for DIR is $DIRS;
    do
    if (( $(stat -c %Y "$dir") < $(date +%s) - 3600*24*30 )); then
        echo "exiting!!"       
    exit
    else
        continue
    fi
    done

Mas agora estou recebendo isso:

 line 40: syntax error: unexpected word (expecting "do")
    
por Vaios Argiropoulos 01.07.2013 / 00:46

2 respostas

3

Tente fazer isso:

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
    
por 01.07.2013 / 00:51
1

A abordagem geral:

find . -mindepth 1 -maxdepth 1 -type d \
  -newermt "$(date --date="1 month ago 00:00" --rfc-3339=seconds)"

Usando seu DIRS :

find $DIRS -maxdepth 0 -type d \
  -newermt "$(date --date="1 month ago 00:00" --rfc-3339=seconds)"
    
por 01.07.2013 / 01:06