
Вдохновленэтот ответ суперпользователяЯ написал следующий 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
Из inotifywait
страницы руководства:
inotifywait эффективно ожидает изменений в файлах с помощью интерфейса Linux inotify(7). Он подходит для ожидания изменений в файлах из скриптов оболочки. Он может либо завершиться после возникновения события, либо непрерывно выполняться и выводить события по мере их возникновения.
и
-m, --monitor Вместо выхода после получения одного события, выполнять бесконечно. Поведение по умолчанию — выход после возникновения первого события.
EDIT: У меня есть журнал, который добавляется каждые 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
В вашем случае, конечно, вам придется изменить событие (modify) на close_write.