Подтвердить что ты не робот

Fswatch для просмотра только определенного расширения файла

Я использую fswatch и хочу, чтобы он срабатывал только в том случае, если был изменен/создан файл с расширением .xxx и т.д. Документация и вторая ссылка ниже указывают, что:

  • Все пути принимаются по умолчанию, если исключающий фильтр не говорит иначе.
  • Фильтры включения могут переопределять любой фильтр исключения.
  • Порядок определения фильтров в командной строке не влияет.

Вопрос: Какое регулярное выражение используется для исключения всех файлов, которые не соответствуют расширению .xxx?

Ссылки:

Платформа:

  • MacOS 10.9.5.
4b9b3361

Ответ 1

Я fswatch автор. Это может быть не очень интуитивно, но fswatch включает в себя все, кроме фильтра исключения, в противном случае. Приходится к вашей проблеме: вы хотите включить все файлы с заданным расширением. Перефразирование с точки зрения фильтров исключения и включения:

  • Вы хотите исключить все.
  • Вы хотите включить файлы с заданным расширением ext.

То есть:

  • Чтобы исключить все, вы можете добавить фильтр исключения, соответствующий любой строке: .*.

  • Чтобы включить файлы с заданным расширением ext, вы добавляете фильтр включения, соответствующий любому пути, заканчивающемуся на .ext: \\.ext$. В этом случае вам нужно избежать точки ., чтобы соответствовать литеральной точке, затем расширению ext и затем соответствовать концу пути с помощью $.

Последняя команда:

$ fswatch [options] -e ".*" -i "\\.ext$"

Если вы хотите нечувствительные к регистру фильтры (например, чтобы соответствовать ext, ext и т.д.), просто добавьте параметр -I.

Ответ 2

Вы можете следить за изменениями в файлах одного расширения следующим образом:

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" .

Это исключает все файлы, а затем включает все пути, заканчивающиеся на .xxx (а также исключать файлы, начинающиеся с точки).

Если вы хотите запустить команду при смене файла, вы можете добавить следующее:

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" -0 . | xargs -0 -n 1 -I {} echo "File {} changed"