По умолчанию текстовый вывод из inotifywait -e CREATE
имеет форму
watched_filename CREATE event_filename
, где watched_filename
представляет /home/inventory/initcsv
, а event_filename
представляет имя нового файла.
Итак, вместо вашей while inotifywait -e ...
строки поставьте:
DIR=/home/inventory/initcsv
while RES=$(inotifywait -e create $DIR); do
F=${RES#?*CREATE }
и в своей строке sed
используйте $F
в качестве имени Filein
. Обратите внимание, что конструкция $(...)
является posix-совместимой формой подстановки процесса (часто выполняемой с использованием обратных кавычек), а результат ${RES#pattern}
равен $RES
с удалением кратчайшего префикса соответствия шаблону. Обратите внимание, что последний символ шаблона является пустым. [см. Обновление 2]
Обновление 1 Для обработки имен файлов, которые могут содержать пробелы, в строке sed используйте "$F"
вместо $F
. То есть используйте двойные кавычки вокруг ссылки на значение F
.
Определения RES=...
и F=...
не должны использовать двойные кавычки, но их можно использовать, если хотите; например: F=${RES#?*CREATE }
и F="${RES#?*CREATE }"
оба будут работать нормально при обработке имен файлов, содержащих пробелы.
Обновление 2 Как отмечено в комментарии Даана, inotifywait
имеет параметр --format
, который управляет формой его вывода. С командой
while RES=$(inotifywait -e create $DIR --format %f .)
do echo RES is $RES at `date`; done
работает в одном терминале и команда
touch a aa; sleep 1; touch aaa;sleep 1; touch aaaa
работает в другом терминале, следующий вывод появился в первом терминале:
Setting up watches.
Watches established.
RES is a at Tue Dec 31 11:37:20 MST 2013
Setting up watches.
Watches established.
RES is aaa at Tue Dec 31 11:37:21 MST 2013
Setting up watches.
Watches established.
RES is aaaa at Tue Dec 31 11:37:22 MST 2013
Setting up watches.
Watches established.