Мне нужно написать сценарий оболочки для запуска в качестве задачи cron или, предпочтительно, при создании файла в определенной папке.
У меня есть папки incoming
и outgoing
(они будутиспользоваться для регистрации почты).Будут созданы файлы с кодами следующим образом ...
bmo-001-012-dfd-11
для исходящих и 012-dfd-003-11
для входящих.Мне нужно отфильтровать код проекта / клиента (012-dfd
) и затем поместить его в папку в определенной папке проекта.
Папки проекта расположены в /projects
и следуют формату 012-dfd
.Мне нужно создать символические ссылки во входящих или исходящих папках проектов, что приведет к правильному файлу в общих папках incoming
и outgoing
.
/incoming/012-dfd-003-11.pdf -> /projects/012-dfd/incoming/012-dfd-003-11.pdf
/outgoing/bmo-001-012-dfd-11.pdf -> /projects/012-dfd/outgoing/bmo-001-012-dfd-11.pdf
Так что мои вопросы
- Как запустить скрипт при добавлении файла во входящую или исходящую папку
- Кроме того, есть ли какие-либо недостатки, связанные с запуском при модификации файла, по сравнению с выполнением задачи cron каждые 5 минут
- Как получить имя файла последних (с момента последнего запуска скрипта) файлов
- Как извлечь код из имени файла
- Как быЯ использую код для создания символической ссылки в нужной папке
РЕДАКТИРОВАТЬ: Что я в итоге сделал ...
while inotifywait outgoing; do find -L . -type l -delete; ls outgoing | php -R '
if(
preg_match("/^\w{3}-\d{3}-(\d{3}-\w{3})-\d{2}(.+)$/", $argn, $m)
&& $m[1] && (file_exists("projects/$m[1]/outgoing/$argn") != TRUE)
){
`ln -s $(pwd)/outgoing/$argn projects/$m[1]/outgoing/$argn;`;
}
'; done;
Это работает довольно хорошо - очисткатакже удалил символические ссылки (с find -L . -type l -delete
), но я бы предпочел сделать это без дополнительных затрат на вызов php.Я просто еще недостаточно хорошо знаю bash.