ファイル追加時にシェルコマンドを自動実行する方法(Windows / Mac)
フォルダにファイルが届いた瞬間に、シェルコマンドやスクリプトを自動で実行する方法。WindowsでもMacでも、タスク スケジューラもcronもAppleScriptも必要ありません。実際の設定手順とコマンド例を紹介します。
フォルダにファイルが現れたらコマンドを実行する。これまでは、Windowsならタスク スケジューラ、MacならcronかAppleScript、あるいはすでにMacを使っているならHazelが必要でした。File Arborはこれをルールで実現します。フォルダを選び、ファイルを一致させ、コマンド実行を選べば、一致したファイルごとにスクリプトが1回実行されます — WindowsでもmacOSでも同じやり方で。バージョン1.1.0で追加されたPro機能です。
このガイドでは、設定方法、使える変数、コマンドを信頼する前にテストする方法、そして真似する価値のあるレシピをいくつか紹介します。
本来もっと簡単であるべきなのに
やりたいことはシンプルです。「ここにファイルが現れたら、それに何かをする」。ところがツール側はたいていそうなっていません。
macOSでは、Hazel が長年このシェルスクリプト実行をルールアクションとして提供してきました。優秀なツールですが、Mac専用です。Windowsを使っているなら、Hazelは選択肢になりませんし、今後もなりません。
OS標準の手段は扱いにくいものです。Windowsのタスク スケジューラはバッチファイルをタイマーで実行できますが、見ているのはフォルダではなく時計であり、一致のロジックは forfiles やPowerShellで自分で書くことになります。macOSではフォルダアクションや cron が使えますが、AppleScriptやシェルのつなぎ込みを書き、コンソールでデバッグする羽目になります。しかもどれも、どのファイルが処理されたのか、各コマンドが何を出力したのかの一覧を見せてくれません。
多くの人が本当に欲しいのはルールです。ファイルを一致させ、コマンドを実行し、結果を見る。その隙間を埋めるのが、File Arborのコマンド実行アクションで、両プラットフォームに対応しています。
コマンド実行アクションができること
File ArborのルールはIF/THENの組です。IF側は拡張子、名前パターン、完全な正規表現、サイズ、経過日数でファイルを一致させます。THEN側がアクションです。コマンド実行は、フォルダへ移動、リネーム、ごみ箱へ移動、完全削除と並ぶアクションのひとつです。
ファイルが一致すると——手動実行のとき、スケジュールどおりのとき、または監視フォルダに届いた瞬間に——File Arborはそのファイルに対してコマンドを1回実行します。Windowsではシステムシェル経由で動くため、バッチ構文、PowerShell、PATH上のものなら何でも使えます。macOSでもシェル経由で動くので、いつものコマンドラインツールがそのまま使えます。同じルールモデル、同じエディタ、両プラットフォーム対応です。
コマンド実行はPro機能です。無料プランの方は、Proライセンスでアンロックできます — 買い切りで、30日間の返金保証付きです。
ファイル追加時にコマンドを実行する手順
これが設定の全体です。2分ほどで終わります。
- 監視するフォルダを追加する。 「Add Folder」をクリックして、ファイルが届く場所を選びます —
Downloads、プロジェクトフォルダ、スキャナーの出力先など、ワークフローに合う場所を選びます。 - ルールを作成して一致条件を設定する。 ルールを追加してIF側を定義します。拡張子(
.md)、名前パターン、^invoice_\d{4}\.pdf$のような正規表現、サイズのしきい値、経過日数で一致させます。一致したファイルだけがコマンドを発火します。 - アクションにコマンド実行を選ぶ。 THEN側でコマンド実行を選び、コマンドを入力します。ファイルのパスや名前が必要な箇所には、下記の変数を使います。
- サンプルファイルでコマンドをテストする。 「テスト」をクリックします。File Arborはサンプルに対してコマンドを1回実行し、終了コード、出力、所要時間を表示します。無人で動かす前に、ここで直しておきます。
- ルールを保存してAuto モードを有効にする。 保存したら、Auto モードをオンにして、ファイルが届いた瞬間にリアルタイムで実行します。ルールは手動やスケジュールでも実行できます。
これでループは完結です。バッチファイルも、スケジュールタスクも、ルールとは別に管理するスクリプトファイルも要りません。
使える変数
コマンド内では3つの変数が使えます。
{filePath}— 一致したファイルのフルパス{fileName}— 拡張子付きのファイル名のみ{folder}— ファイルがあるフォルダ
File Arborが自動でクォート処理を行うため、スペースを含むパスも自分でクォートで囲む必要はありません。"{filePath}" ではなく {filePath} と書きます。
信頼する前にテストする
無人で動くコマンドは、動作を確認できてこそ役立ちます。それを安全にする仕組みが2つあります。
テストボタンは、サンプルファイルに対してコマンドを1回実行し、終了コード、出力、所要時間を報告します。ルールを保存する前に、コマンドが何をするのかを正確に確認できます。
コマンド実行履歴パネルは、実際の実行をすべて記録します — コマンド、ファイル、終了コード、そして出力の全文。深夜3時に何かが失敗しても、推測する必要はありません。確認したときに出力がそこに残っています。
真似する価値のある実例
ノートをgitリポジトリに自動コミットする。 ノート用フォルダにMarkdownファイルを置くと、自動でコミットされるようにします。
- 監視:
C:\Projects\notes(Macなら~/Projects/notes) - 条件: 拡張子が
.md - コマンド:
git -C {folder} add {fileName} && git -C {folder} commit -m "Add {fileName}"
届いた瞬間に動画を圧縮する。 画面録画を再エンコードして容量を節約します。
- 条件: 拡張子が
.mov - コマンド:
ffmpeg -i {filePath} -vcodec libx265 -crf 28 {folder}/compressed-{fileName}
完成した書き出しをオフサイトにアップロードする。 rsync や scp でレンダリング結果をバックアップサーバーへ送ります。
- 条件: 名前が
export_で始まる - コマンド:
rsync {filePath} backup:/media/incoming/
特定のファイルが届いたら自分に通知する。 デスクトップ通知やWebhookを発火させて、請求書やレポートが届いたことを知らせます。
パターンは常に同じです。ファイルを一致させ、すでに使っているツールを実行する。File Arborがトリガーとファイル選択を担い、作業はあなたのコマンドが行います。
Hazelのシェルスクリプトとの比較
Hazelのワークフローからここに来た方には、対応はそのまま分かります。Hazelの「シェルスクリプトを実行」アクションも、File Arborのコマンド実行アクションも、一致したファイルごとにファイルのパスを使えるコマンドを実行します。違いは対応範囲です。HazelはmacOS専用ですが、File Arborは同じルールをWindowsとMacで実行します。より詳しい比較はFile Arbor vs Hazelをご覧ください。
File Arborが再現していないのは、Hazel固有のmacOS向けスクリプト連携 — AppleScriptやSpotlightメタデータによる条件です。これらに依存する自動化なら、Mac上ではHazelに分があります。ファイルに対してコマンドやスクリプトを実行するという点では、両者は互角です。
制限と安全性
重要なものを組む前に知っておきたいことをいくつか。
- ファイルごとに1回。 一致したファイルはコマンドを1回だけ発火し、ループはしません。
- 30秒のタイムアウト。 コマンドはデフォルトで30秒でタイムアウトするため、ハングしたスクリプトが他のルールを止めることはありません。
- Microsoft Store版には含まれません。 Storeのポリシーが任意のコマンドの起動をブロックするため、Store版にはコマンド実行が含まれていません。直接ダウンロード版には入っています。
まずはコマンド1つから
手作業でファイルに繰り返し行っていることを1つ選び — コミット、圧縮、アップロードなど — それを1つのルールにしてみてください。File Arborをダウンロードして無料プランから始めるか、1.1.0で追加されたその他の機能を読んでみてください。アプリが初めての方は、スタートガイドで約5分で最初のルールを設定できます。
よくある質問
File ArborはHazelのようにシェルスクリプトを実行できますか?
はい。File Arborのコマンド実行アクションは、一致したファイルごとに任意のシェルコマンドやスクリプトを1回実行します。{filePath}、{fileName}、{folder} の変数が使えます。Hazelのシェルスクリプトアクションと同じことができ、さらにHazelが対応していないWindowsでも動作します。Pro機能です。
ファイルイベントでのコマンド実行はWindowsでも動きますか?
はい。File ArborはコマンドをWindowsとmacOSの両方で実行します。Windowsではシステムシェル経由で動くため、バッチコマンド、PowerShell、PATH上の任意のツールが使えます。タスク スケジューラや別のバッチファイルを用意する必要はありません。
コマンド実行アクションは無料版でも使えますか?
いいえ。コマンド実行はPro機能です。Proは24.99ドルの買い切りで、30日間の返金保証が付いています。無料プランでも、移動・リネーム・ごみ箱へ移動のアクションは引き続き利用できます。
なぜMicrosoft Store版にはコマンド実行がないのですか?
Microsoft Storeのポリシーでは任意のコマンドの起動が制限されているため、Store版にはコマンド実行アクションが含まれていません。filearbor.com から直接ダウンロードすれば利用できます。それ以外の機能は2つのビルドで同一です。
コマンドがハングしたり失敗したりした場合はどうなりますか?
コマンドはデフォルトで30秒でタイムアウトするため、止まったスクリプトが他のルールを妨げることはありません。すべての実行はコマンド実行履歴パネルに終了コードと出力の全文とともに記録されるので、深夜3時の失敗も、確認したときに詳細がそろっています。
