1. ホーム
  2. マコス

[解決済み】Macで「watch」や「inotifywait」のようなコマンドはないのでしょうか?

2022-03-26 20:04:15

質問

Mac (Snow Leopard) でフォルダを監視して、スクリプトを実行したいのですが、フォルダに移動したばかりのファイル名(パラメータとして... x.sh "filename") を与えてもいいでしょうか?

私はbashで書かれたスクリプト(x.sh)を持っていて、入力でいくつかのファイルや他のものを移動させます$1私はただ、新しいファイル/フォルダがディレクトリに移動/作成されたときにOSXが私にファイル名を与える必要があります。

そのようなコマンドはありますか?

解決方法は?

スウォッチ

スウォッチ は、Mac OS X FSEvents API を使って、あるディレクトリを監視する小さなプログラムです。 そのディレクトリへの何らかの変更に関するイベントを受信すると,指定された でシェルコマンドを実行します。 /bin/bash

GNU/Linuxなら。 イノティファイウォッチ (の一部)。 inotify-tools パッケージは、ほとんどのディストリビューションで という機能があります。

更新しました。 fswatch が、BSD、Debian、Windowsを含む多くのプラットフォームで使用できるようになりました。

構文 / 簡単な例

複数のパスを見ることができる新しい方法 - for バージョン 1.x 以降 :

fswatch -o ~/path/to/watch | xargs -n1 -I{} ~/script/to/run/when/files/change.sh

で出力される数値は -o の末尾に追加されます。 xargs コマンドがなければ -I{} . その番号を使用する場合は、次のようにします。 {} をコマンドのどこかに記述してください。

の古い方法は バージョン0.x :

fswatch ~/path/to/watch ~/script/to/run/when/files/change.sh

Homebrewによるインストール

2013年9月12日現在、再び追加されたのは ホームブリュー - やったー というわけで、数式リストを更新して( brew update )を作成し、あとはやるだけです。

brew install fswatch

Homebrewを使用しないインストール

でこれらのコマンドを入力します。 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.x

Usage:
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.