Mac (Snow Leopard) でフォルダーを監視し、スクリプトを実行します (フォルダーに移動したばかりのファイル名を (パラメーターとして... x.sh "ファイル名") として指定します)。
入力 $1 でいくつかのファイルやその他のものを移動するスクリプトをすべて bash (x.sh) で作成しました。新しいファイル/フォルダーがディレクトリに移動/作成されたときにファイル名を指定するために OSX が必要なだけです。
そのようなコマンドはありますか?
fswatchは、Mac OS X FSEvents API を使用してディレクトリを監視する小さなプログラムです。そのディレクトリへの変更に関するイベントが受信されると、指定されたシェル コマンドが実行されます。/bin/bash
GNU/Linux を使用している場合は、
inotifywatch (
inotify-tools
ほとんどのディストリビューションのパッケージの一部) が同様の機能を提供します。
更新: fswatch
BSD、Debian、Windows を含む多くのプラットフォームで使用できるようになりました。
複数のパスを監視できる新しい方法 -バージョン 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
2013 年 9 月 12 日の時点で、 homebrewに追加されました。したがって、数式リスト ( 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.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.
Homebrew から入手できるFacebook のwatchmanも見栄えがします。フィルタリングもサポートしています:
これらの 2 行は、ソース ディレクトリの監視を確立し、CSS ファイルが変更されるたびに「minify-css」というツールを実行する「buildme」というトリガーを設定します。ツールには、変更されたファイル名のリストが渡されます。
$ watchman watch ~/src
$ watchman -- trigger ~/src buildme '*.css' -- minify-css
パスは絶対パスでなければならないことに注意してください。
Apple OSXフォルダー アクションを使用すると、フォルダーで実行されたアクションに基づいてタスクを自動化できます。
編集: fsw
にマージされましfswatch
た。この回答では、 への参照はすべて とfsw
読む必要がありますfswatch
。
私は、いくつかの改善を特徴fswatch
とする C++ と呼ばれる置換を作成しました。fsw
これは、サポートされているプラットフォーム (OS X v. >= 10.6) でビルドする GNU Build System プロジェクトです。
./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
.strftime
時刻の形式は、書式文字列を使用してカスタマイズできます-t, --time-format
。-u, --utc-time
.fsw の取得:
fsw
GitHubでホストされており、リポジトリのクローンを作成して取得できます。
git clone https://github.com/emcrisostomo/fsw
fsw のインストール:
fsw
次のコマンドを使用してインストールできます。
./configure && make && sudo make install
さらに詳しい情報:
また、紹介ブログ記事も書きました。そこでは、どのように機能するかについていくつかの例を見つけることができますfsw
。
fswatchの私のフォークはinotifywait -m
、わずかに少ない (待つ必要はありません! Linux では多くの問題を抱えていinotifywait
ます ...) 解析しやすい出力での機能を提供します。
fswatch
フォークするプログラムを提供する必要がなく、変更されたファイルの実際のパスを STDOUT 経由で送信するため、オリジナルよりも改善されています。
これは、自動化に使用する一連の恐ろしい bash スクリプトの基盤として堅実です。
(これはトピック外です)inotifywait
一方、Linuxでは、その上に多くのクラッジが必要であり、それを管理するための良い方法をまだ見つけていませんが、に基づく何かnode.js
がチケットかもしれません.
私はこれをmacOSで行うことになりました。私はこれが多くの点でひどいと確信しています:
#!/bin/sh
# watchAndRun
if [ $# -ne 2 ]; then
echo "Use like this:"
echo " $0 filename-to-watch command-to-run"
exit 1
fi
if which fswatch >/dev/null; then
echo "Watching $1 and will run $2"
while true; do fswatch --one-event $1 >/dev/null && $2; done
else
echo "You might need to run: brew install fswatch"
fi
sudo fs_usage -f filesys | grep "おもしろいこと" ?
watch
以下は、 3 秒ごとにコマンドを実行したいコマンドを持っていないユーザーのための単純な 1 行の代替手段です。
while :; do your-command; sleep 3; done
これは、基本的に次のことを行うのと同じ無限ループです。
watch -n3 your-command