Событие IN_CREATE incron даст мне пустой файл?

#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Необходимо заключить в кавычки $@ потому что для аргументов возможно содержать пробелы (или новые строки, и т.д.), если Вы заключаете им в кавычки или выходите из них с a \. Например:

./myscript one 'two three'

Это - два аргумента, а не три, из-за кавычек. Если Вы не заключаете в кавычки $@, те аргументы будут разбиты в рамках сценария.

5
14.07.2014, 13:06
2 ответа
[

]Да, []IN_CREATE[] даст (или, по крайней мере, может дать) вам пустой файл. Как видно из названия, событие генерируется при создании нового файла, а новые файлы создаются пустыми. Возможно, что к тому времени, как процесс, получивший уведомление, обходит чтение файла, он не будет пустым, но, как правило, в этот момент он не будет записан полностью.[

] [

]Чтобы отреагировать на завершенный файл, []IN_WRITE_CLOSE[] - это то, что вам нужно. Обратите внимание, что это событие вспыхнет, если процесс создания файла завершится неудачно. Чтобы избежать этого, общая стратегия заключается в том, чтобы процесс записал файл, а затем переименовал его (возможно, переместив в другой каталог). После этого Ваш монитор прослушает []IN_MOVED_FROM[].[

].
3
27.01.2020, 20:36
[

]Вы можете наблюдать, какие события передаются в вашу директорию с помощью []inotifywait[], чтобы проверить, как он ведет себя, когда ваш процесс запущен: [

] [
$ inotifywait -m . 
Setting up watches.
Watches established.
] [

]Например, после запуска []touch file[] в том же каталоге:[

] [
$ inotifywait -m .
Setting up watches.
Watches established.
./ CREATE file
./ OPEN file
./ ATTRIB file
./ CLOSE_WRITE,CLOSE file
] [

]Поскольку между созданием файла и его закрытием существует задержка, после события CREATE, как вы и предполагали, будет пустой файл. Обратите внимание на события, следующие после запуска:[

] [
from time import sleep

with open("somefile", 'w') as somefile:
    sleep(15)
    somefile.write("...")
] [

]поэтому использование события CLOSE_WRITE звучит разумно.[

].
5
27.01.2020, 20:36

Теги

Похожие вопросы