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


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 preciso usar?


2


origem


sleep 5h; yourcommand. - davidbaumann
@davidbaumann isso deve estar em resposta não em comentário. - Francisco Tapia
Desculpe, não tive tempo de responder com explicações. - davidbaumann


Respostas:


O script de shell acima sugerido pelo statox está correto, mas não leva em conta 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 a partir da qual você está executando o comando roteiro.

A maneira mais simples de se assegurar contra todos esses eventos simultaneamente é usar o a comando para executar a frente no tempo a segunda verificação. 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.txte, se não existir, realiza ações adequadas sabendo que o lapso de 5 horas já expirou.

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

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

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


4





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 ] use o -f parâmetro 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.

EDITAR: 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.


2



Eu não tenho reputação suficiente para comentar sobre sua resposta, então eu farei aqui: A resposta do @MariusMatutiae é muito mais robusta e o uso de at now é bem legal eu não sabia disso. OP deve aceitar esta resposta. - statox
@startox sua resposta está certa, o usuário não perguntou sobre o comando persistente para que o seu script resolva sua pergunta. - Francisco Tapia
@Francisco, de fato, minha resposta resolve o problema, mas acho sua solução mais elegante, já que abrange mais cenários sem introduzir uma desvantagem :) Essa OP está livre para usar a solução que ela julgar mais adequada à sua situação. - statox