Есть ли такая команда, как" 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.app
cd /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