Как автоматизировать процесс выполнения команды после создания файла . У меня есть приложение, в котором инструмент генерирует схему xsd из файла XML. Мой следующий модуль использует эту схему xsd для дальнейшей обработки.
Я хочу автоматизировать этот процесс, то есть запустить команду после создания файла. Это приложение будет работать каждый день на машине с Ubuntu, поэтому я хочу его автоматизировать. Я не хочу никакого вмешательства человека в этот процесс. Я выполнил поиск inotify lib, который используется для аналогичных целей, но заставляет меня изменить дизайн моей системы.
Есть ли другие альтернативы, которые могли бы решить эту задачу? Любая помощь высоко ценится.
Выяснение, когда файл закончен, будучи записанным, является твердой частью. Лучше использовать сценарий как:
#!/bin/sh
program-that-creates-xsd
program-that-does-further-processing
действительно нет никаких хороших решений, если Вы не можете структурировать свою программу как это. Даже с inotify, почти невозможно сказать, когда XSD действительно закончен.
Обнаружение создания файла в определенной папке может быть сделано через inotifywait
, который является частью inotify-tools
пакет, устанавливаемый через sudo apt-get install inotify-tools
.
Как пример, мы можем установить непрерывные часы (-m
флаг) на каталоге Desktop
и проанализировать вывод для созданных записей каталога, однако определив, является ли файл регулярным файлом, и имя файла является тем, в котором мы нуждаемся, должен быть сделан вручную:
inotifywait -m --format "%f" -e create ./Desktop/ |
while read -r fname; do
[ -f ./Desktop/"$fname" ] && [ "$fname" = "specific.csv" ] && echo "We got 'em!"
done
Поэтому в случае, если кто-то делает каталог specific.csv
, который должен быть отклонен, но если specific.csv
создается, мы выполнимся echo
часть, которая могла бы быть заменена другими командами или функциями оболочки. При необходимости в неблокирующемся выполнении Вы могли бы полагать, что добавление setsid
запустило команду на новой сессии и позволило сценарию продолжить смотреть.