Я использую fswatch
, чтобы отслеживать изменения в каталоге, но хотел бы, чтобы этот процесс остановился, если существует определенный файл (с подстановочным знаком). Этот определенный файл создается в альтернативном каталоге (не в отслеживаемой директории) другим процессом (который генерирует изменения, которые необходимо отслеживать).Остановить просмотр папки для изменений, если файл существует (bash)
Вот что я пытался сделать:
while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do
fswatch "${path_to_the_tracked_directory}"
done && echo "Done"
Однако этот сценарий не завершается после того, как ${file_to_check}
появляется.
Комплекс бит в состоянии, чтобы заботиться о групповых символов в соответствии с: Bash check if file exists with double bracket test and wildcards
РЕДАКТИРОВАТЬ:
Комплекс бит может быть упрощено до:
while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
fswatch "${path_to_the_tracked_directory}"
done && echo "Done"
Вы переписали код неправильно. Должно быть пространство после 'set --' – tripleee
Кроме того, двойное цитирование шаблона означает, что вы можете просто использовать' while! [-f "$ file_to_check"] '- код, на который вы ссылаетесь, предназначен для проверки того, соответствует ли подстановочный знак точно одному файлу, в отличие от нуля или нескольких. С одним статическим именем файла и без подстановочных знаков это, очевидно, серьезный перебор. – tripleee
@tripleee: Спасибо, на самом деле моя первая попытка была 'while [! -f "$ {file_to_check}"] ', но он не работает с подстановочными знаками. – econ