1

Вдохновленный этим ответом суперпользователя, я написал следующий скрипт copy_library.sh , сохраненный в той же папке, что и файл с именем library.bib:

#!/bin/sh
while inotifywait -e close_write library.bib; do
    cp -f ./library.bib ../other_place/ ;
    echo "Library copied"
done

Если я запускаю этот скрипт вручную с помощью ./copy_library.sh процесс завершается после первой копии (которая работает успешно):

londonrob ~/mydir
> ./copy_library.sh 
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE 
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>

и никаких дальнейших изменений не отслеживается. Я уверен, что должен что-то делать с этим сценарием, чтобы он работал постоянно "в фоновом режиме", и мне не нужно запускать его вручную.

Но что?

1 ответ1

1

Со страницы man inotifywait :

inotifywait эффективно ожидает изменений в файлах с помощью интерфейса Linux inotify(7). Подходит для ожидания изменений файлов из сценариев оболочки. Он может либо завершить работу при возникновении события, либо постоянно выполнять и выводить события по мере их возникновения.

а также

-m, --monitor Вместо выхода после получения одного события, выполнять неопределенно долго. Поведение по умолчанию - выход после первого события.

РЕДАКТИРОВАТЬ: У меня есть журнал, который добавляется каждые 15 секунд. Следующий скрипт выполняет цикл while one для каждой строки, выводимой inotifyread:

#!/bin/sh

inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
    echo "$line"
    echo "Copy coperation here..."
done

В вашем случае, вы, конечно, должны изменить событие (изменить) на close_write.

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