2

Я хочу проверить, содержит ли каталог файл (например, sample.txt). Если он не содержит этот файл в течение 5 часов, мне нужно выполнить какое-то действие. Как я могу сделать это в сценарии?

Я попробовал это:

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

Какие команды мне понадобятся?

2 ответа2

4

Вышеприведенный скрипт оболочки, предложенный statox, конечно, верен, но он не учитывает тот факт, что компьютер может выйти из строя между двумя проверками, или вы можете выйти из системы, или вы можете прервать сеанс ssh, из которого вы запускаете скрипт.

Самый простой способ обезопасить себя от всех этих событий одновременно - использовать команду at для своевременного выполнения второй проверки. Поэтому я предлагаю изменить приведенный выше скрипт следующим образом:

 #!/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

где /home/Savio/ExecutableScript - это исполняемый скрипт (* chmod 755 ExecutableScript), который проверяет выход файла файл sample.txt и, если он не существует, предпринимает соответствующие действия, зная, что истек 5-часовой промежуток времени.

Я понимаю, что большинство людей не знакомы с форматом + 5 часов при вызове, вы можете найти его подробно здесь.

Вышесказанное переживет перезагрузки, выходы из системы, отключения.

РЕДАКТИРОВАТЬ: команда at особенно полезна, потому что она использует вашу среду, а не root. Кроме того, имейте в виду, что at использует стандартную оболочку Bourne sh, а не bash -again shell bash. Таким образом, в she-bang в файле /home /Savio /ExecutableScript убедитесь, что вы явно указали оболочку bash, чтобы она работала так, как вы ожидаете.

2

Вы могли бы использовать что-то подобное

#!/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

Переменная $FILE содержит путь к файлу, который вы ищете, его можно изменить для поиска других файлов.

Тест, if [ ! -f $FILE ] использовать параметр -f который имеет значение «Проверить, существует ли файл».

И задержка, в которой вы нуждаетесь, осуществляется со sleep 5h . Сон позволяет приостановить скрипт. Если вы не указали суффикс после числа, время интерпретируется как секунды, но вы также можете использовать суффиксы s , m , h и d чтобы установить время в секундах, минутах, часах или днях.

РЕДАКТИРОВАТЬ: Проблема этого метода заключается в том, что он не переживет перезагрузку или отключение, см. Ответ @MariusMatutiae для более надежного решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .