Como verificar se existe um arquivo após um intervalo de tempo específico

2

Eu quero verificar se um diretório contém um arquivo (por exemplo, sample.txt). Se não contiver esse arquivo em 5 horas, precisarei executar alguma ação. Como posso fazer isso em um script?

Eu tentei isso:

if=$(find /home/Savio/Dsktop/check -type f -Sample.txt "*.txt") )

Quais serão os comandos que eu preciso usar?

    
por user 25.05.2015 / 15:03

2 respostas

4

O script de shell acima sugerido pelo statox está correto, mas não leva em consideração o fato de que o computador pode ficar entre as duas verificações, ou você pode fazer logout, ou você pode interromper a sessão ssh da qual você estão executando o script.

A maneira mais simples de se assegurar contra todos esses eventos simultaneamente é usar o comando at para executar a segunda checagem. Assim, sugiro que o script acima seja modificado da seguinte forma:

 #!/bin/bash
 FILE=/home/Savio/Dsktop/check/sample.txt    
 if [ -f $FILE ]
 then
        #Do what you want if file exists
 else
        at now + 5 hours /home/Savio/ExecutableScript
 fi

onde / home / Savio / ExecutableScript é um script executável (* chmod 755 ExecutableScript) que verifica a saída do arquivo exemplo.txt e, se não existe, toma ações adequadas sabendo que o lapso de tempo de 5h já expirou.

Eu entendo que a maioria das pessoas não está familiarizada com o formato agora + 5 horas de em invocação, você pode encontrá-lo detalhado aqui .

O acima irá sobreviver a reinicializações, logouts, desconexões.

EDIT: o comando at é especialmente útil porque usa o seu ambiente, e não o root . Além disso, lembre-se de que at usa o shell Bourne padrão sh , não o shell Bourne-again bash . Assim, no she-bang no arquivo / home / Savio / ExecutableScript, certifique-se de especificar o shell bash explicitamente, para que ele funcione como você espera.

    
por 25.05.2015 / 16:07
2

Você poderia usar algo assim

#!/bin/bash
FILE=/home/Savio/Dsktop/check/sample.txt    
if [ -f $FILE ]
then
    #Do what you want if file exists
else
    sleep 5h
    if [ ! -f $FILE ]
    then
        #Do what you want if the file still doesn't exists
    fi
fi

A variável $FILE contém o caminho do arquivo que você está procurando, ele pode ser modificado para procurar outros arquivos.

O teste if [ ! -f $FILE ] usa o parâmetro -f , que é "Testar se o arquivo existe".

E o atraso que você precisa é implementado com sleep 5h . Sono permite pausar um script. Se você não fornecer um sufixo após o número, a hora será interpretada como segundos, mas você também poderá usar os sufixos s , m , h e d para definir o tempo para segundos, minutos, horas ou dias .

EDIT: O problema deste método é que ele não sobreviverá a uma reinicialização ou desconexão, veja a resposta da @MariusMatutiae para uma solução mais robusta.

    
por 25.05.2015 / 15:27

Tags