Есть ли такая команда, как" watch "или" inotifywait " на Mac?
Я хочу посмотреть папку на моем Mac (Snow Leopard), а затем выполнить скрипт (давая ему имя файла того, что только что было перемещено в папку (в качестве параметра... x.sh "имя файла")).
У меня есть сценарий, написанный в bash (x.sh) что будет перемещать некоторые файлы и другие вещи на вход $1 Мне просто нужно OSX, чтобы дать мне имя файла, когда новые файлы/папки перемещаются/создаются в dir.
есть такая команда?
12 ответов:
fswatch
fswatch это небольшая программа, использующая API Mac OS X FSEvents для мониторинга каталога. Когда получено событие о любом изменении в этом каталоге, указанный команда оболочки выполняется с помощью
/bin/bashесли вы находитесь на GNU / Linux, inotifywatch (часть
inotify-toolsпакет на большинстве дистрибутивов) предоставляет аналогичные функциональность.обновление:
fswatchтеперь можно использовать во многих платформы, включая BSD, Debian и Windows.Синтаксис / Простой Пример
новый способ, который может смотреть несколько путей-для версии 1.X и выше:
fswatch -o ~/path/to/watch | xargs -n1 ~/script/to/run/when/files/change.shстарый способ для версии 0.x:
fswatch ~/path/to/watch ~/script/to/run/when/files/change.shустановка с доморощенным
по состоянию на 9/12/13 он был добавлен обратно в доморощенного - ура! Итак, обновите свой список формул (
brew update), а затем все, что вам нужно сделать это:brew install fswatchустановка без доморощенного
введите эти команды в
Terminal.appcd /tmp git clone https://github.com/alandipert/fswatch cd fswatch/ make cp fswatch /usr/local/bin/fswatchесли у вас нет
cкомпилятор в вашей системе вам может потребоваться установить Xcode или Xcode инструменты командной строки-оба бесплатно. Однако, если это так, вы должны, вероятно, просто проверьте homebrew.Дополнительные параметры
fswatchВерсия 1.xUsage: fswatch [OPTION] ... path ... Options: -0, --print0 Use the ASCII NUL character (0) as line separator. -1, --one-event Exit fsw after the first set of events is received. -e, --exclude=REGEX Exclude paths matching REGEX. -E, --extended Use exended regular expressions. -f, --format-time Print the event time using the specified format. -h, --help Show this message. -i, --insensitive Use case insensitive regular expressions. -k, --kqueue Use the kqueue monitor. -l, --latency=DOUBLE Set the latency. -L, --follow-links Follow symbolic links. -n, --numeric Print a numeric event mask. -o, --one-per-batch Print a single message with the number of change events. in the current batch. -p, --poll Use the poll monitor. -r, --recursive Recurse subdirectories. -t, --timestamp Print the event timestamp. -u, --utc-time Print the event time as UTC time. -v, --verbose Print verbose output. -x, --event-flags Print the event flags. See the man page for more information.
можно использовать launchd для этой цели. Launchd можно настроить для автоматического запуска программы при изменении пути к файлу.
например, следующий launchd config plist запустит программу
/usr/bin/loggerпри изменении папки рабочего стола моей учетной записи пользователя:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>logger</string> <key>ProgramArguments</key> <array> <string>/usr/bin/logger</string> <string>path modified</string> </array> <key>WatchPaths</key> <array> <string>/Users/sakra/Desktop/</string> </array> </dict> </plist>чтобы активировать список конфигурации, сохраните его в папке LaunchAgents в папке библиотеки как " logger.файл plist".
из оболочки вы можете использовать команда
launchctlдля активации регистратора.plist, запустив:$ launchctl load ~/Library/LaunchAgents/logger.plistпапка рабочего стола теперь контролируется. Каждый раз, когда он изменяется, вы должны видеть выход в системе.войти (использовать консоль.приложение.) Для деактивации регистратора.плист, беги:
$ launchctl unload ~/Library/LaunchAgents/logger.plistфайл конфигурации выше использует . В качестве альтернативы вы также можете использовать . Смотрите launchd man страница для получения дополнительной информации.
Facebook сторож, доступный через Homebrew, также выглядит красиво. Он также поддерживает фильтрацию:
эти две строки устанавливают часы в исходном каталоге, а затем устанавливают триггер под названием "buildme", что позволит запустить инструмент под названием "Код-УСБ" всякий раз, когда файл CSS изменяется. Инструмент будет передан список изменены имена.
$ watchman watch ~/src
$ watchman -- trigger ~/src buildme '*.css' -- minify-cssобратите внимание, что путь должен быть абсолютный.
сторож является кросс-платформенным API python для просмотра файлов / каталогов, и он имеет встроенный инструмент "трюки", который позволяет запускать действия (включая команды оболочки) при возникновении событий (включая новый добавленный файл, удаленный файл и измененный файл).
Это лишь entr в качестве альтернативы на OSX для запуска произвольных команд при изменении файлов. Я нахожу это простым и полезным.
Apple OSX Действия С Папками позволяет автоматизировать задачи на основе действий, выполненных в папке.
Edit:
fswбыл объединен вfswatch. В этом ответе любая ссылка наfswтеперь следует читатьfswatch.я написал
fswatchзамена в C++ называетсяfswкоторый имеет несколько улучшений:
это проект GNU Build System, который строится на любой поддерживаемой платформе (OS X v. >= 10.6) с
./configure && make && sudo make installнесколько путей могут быть приняты как различные аргументы:
fsw file-0 ... file-nон сбрасывает подробную запись со всей информацией о событии, такой как:
Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFileвыход ее легко разобрать, так что
fswвыход может быть передан другому процессу.- задержка может быть настроена с помощью
-l, --latency.- числовые флаги событий могут быть написаны вместо текстовых с помощью
-n, --numeric.- формат времени можно настроить с помощью строки с
-t, --time-format.- время может быть local время машины (по умолчанию) или время UTC с
-u, --utc-time.получение fsw:
fswи размещено на GitHub и можно получить клонирование своего репозитория:git clone https://github.com/emcrisostomo/fswустановка fsw:
fswможно установить с помощью следующих команд:./configure && make && sudo make installдополнительная информация:
я тоже написал вступительное блоге где можно найти пару примеров о том, как
fswстроительство.
вот один лайнер с помощью
sschober' s инструмент.$ while true; do kqwait doc/my_file.md; make; done
моя вилка fswatch обеспечивает функциональность
inotifywait -mчуть меньше (нет, больше! У меня гораздо больше проблем на Linux сinotifywait...) удобный для разбора вывод.это улучшение по сравнению с оригиналом
fswatchпотому что он отправляет фактический путь измененного файла через STDOUT вместо того, чтобы требовать от вас предоставить программу, которую он разветвляет.это была твердая скала, как основа серии страшных сценариев bash, которые я использую автоматизировать вещи.
(это не по теме)
inotifywaitна Linux, с другой стороны, требуется много kludges поверх него, и я до сих пор не придумал хороший способ управлять им, хотя я думаю, что что-то основано наnode.jsможет быть билет.
у меня есть суть для этого, и использование довольно просто
watchfiles <cmd> <paths...>чтобы проиллюстрировать, следующая команда будет Эхо
Hello Worldкаждый разfile1илиfile2изменить; и проверка интервала по умолчанию составляет 1 секундуwatchfiles 'echo Hello World' /path/to/file1 /path/to/file2если я хочу проверять каждые 5 секунд я могу использовать
-tфлагwatchfiles -t 'echo Hello World' /path/to/file1 /path/to/file2
-vпозволяетverboseрежим, который показывает отладочную информацию-qделаетwatchfilesспокойно выполнять (#будет показано, чтобы пользователь мог видеть, что программа выполняется)watchfilesвыполнить совершенно спокойно-hпоказывает справкуhttps://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55