Я пытаюсь найти способ немедленно переместить файл в другую папку, как только он появится в моем выпадающем списке на CentOS.
Я искал Интернет для некоторых подсказок, но я не могу получить больше, чем тот факт, что мне нужно использовать inotify
для вызова скрипта, который будет обрабатывать файл, как он выглядит.
Мои знания BASH очень ограничены, и я сомневаюсь, что смогу написать это на PHP.
Другими словами, как я могу переместить файл в другую папку, как только он появится с помощью inotify
?
Ответы:
Это простой подход:
С более подробной информацией о типах файлов, которые вы хотите переместить, вы можете добавить некоторые проверки, журналы и т. Д ...
источник
create
события некорректно, так как вы сделаетеmv
файл, который может быть не полностью скопирован на диск. Смотрите ответ @Gilles, используяclose_write
вместо этого событие.Команда
inotifywait
печатает сообщение каждый раз, когда содержимое указанного каталога изменяется. Вам нужно выбрать правильное событие: не когда файл создан, а когда Dropbox завершит его загрузку. Я не знаю точно, как работает Dropbox. Если он пишет в файл в его окончательном месте, слушайтеclose_write
события. Если он записывает в файл во временную папку, а затем перемещает его на место, прослушивайтеmoved_to
события. Проходят варианты ,-m -q
чтобыinotifywait
таким образом , что он держит прослушивание событий (по умолчанию, он ждет только для следующего события) и печатает только соответствующие сообщения.источник
inotifywait
вывода имен файлов с нулевым символом в конце. Лучшее, что я мог сделать, это использовать символ, который менее вероятен, чем символ новой строки, например%f$'\001'
, и использовать-d $'\001'
сwhile IFS= read -r
илиxargs
.inotifywait
это раздражает. Вы можете использовать что-то вроде//%f
, так как имя файла никогда не будет содержать двойной косой черты, пока путь для просмотра не будет; тогда раздражение на стороне разбора.