しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

automatorで共有フォルダを監視+通知したい

共有フォルダを監視、中身が更新されたら通知するようなアクションを

automatorでする方法を探しています。

通知はダイアログ形式か、youtubeのような右下から小さく表示されるようなものが理想です。

恥ずかしながらApplescriptやjavascriptなどのプログラミング言語に明るくなく、コピペするだけで動くようなものを

探しています。

皆様のお知恵を借りられたらと質問いたしました。


iMAC High sierra

ver10.13.6を使っています。


よろしくお願いいたします。

iMac, macOS High Sierra (10.13.6)

投稿日 2018/10/29 18:11

返信
返信: 9

2018/10/29 20:42 nao290 への返信

Automator でフォルダアクションを作成することはできますが、指定したフォルダにファイルが追加された時にワークフローを実行するだけのようで、ファイルが削除された時に動く仕組みは用意されてないようです。


追加時のみの動作で構わないのであれば、こんな感じで良いかと。

1. Automator を起動

2. 「書類の種類を選択してください:」から「フォルダアクション」を選択

3. 「通知を表示」アクションをダブルクリック

4. フォルダを指定

5. タイトル、メッセージを入力

6. 適当な名前で保存


Automator のフォルダアクションワークフローは次の場所に保存されます。

$HOME/Library/Workflows/Applications/Folder Actions


ユーザがアップロードしたファイル

ーーーーー


追加時と削除時の両方に対応したいなら Automator ではなく、AppleScript でこんな感じにすると良いでしょう。


作り方

  1. フォルダアクション用スクリプトを作成 (下記コードを ScriptEditor にコピペ)
  2. 所定の場所に保存
  3. フォルダアクション設定.app を起動し、フォルダアクションを設定


フォルダアクション設定.app

/System/Library/CoreServices/Applications/Folder Actions Setup.app


フォルダアクション用のスクリプトの置き場所

$HOME/Library/Scripts/Folder Action Scripts


コード

on adding folder items to dir after receiving argv
    display notification "ファイルが追加されました" with title POSIX path of dir
end adding folder items to

on removing folder items from dir after losing argv
    display notification "ファイルが削除されました" with title POSIX path of dir
end removing folder items from

ーーーーー


なお、フォルダアクションの解除は、フォルダアクション設定で行います。解除後はファイルを手動で捨てて構いません。


ユーザがアップロードしたファイル

2018/10/30 01:06 Hiro__S への返信

T22T さんのコメントを読んで気づいたのですが、フォルダアクションの監視対象は指定フォルダ直下のみです。なので、指定フォルダ内にさらにフォルダがあって、その中にファイルが追加されたり、削除されたりした場合はフォルダアクションが使えません。


ということで、簡単な AppleScript アプリケーションを作ってみました。インターバルは10秒とちょっと長めにしてありますから、ファイルを追加したらしばらく待ってください。あと、ファイル数が極端に多い場合は期待通りに動きません。


作り方

  1. 下記コードをスクリプトエディタにコピペ
  2. 適当な名前で保存
  • フォーマット: アプリケーション
  • オプション: ハンドラ実行後に終了しない


使い方

  • 作成したアプリケーションを起動する - ダイアログに従い監視フォルダの場所を指定 (初回起動時のみ)
  • 終了方法は通常アプリケーションと同じ


コード

property flag : true
property interval : 10

property args : ""
property dir : ""

on run
    try
        set flag to true
        set interval to interval

        if dir is "" then
            set dir to choose folder with prompt "監視するフォルダを選択してください。"
        end if

        set args to my findall(dir)
    on error errs number errn
        return errs
    end try
end run

on idle
    if flag is true then
        set flag to false
        my main()
        set flag to true
    end if

    return interval
end idle

on quit
    continue quit
end quit

on main()
    try
        set new_args to my findall(dir)
        set is_equal to my compare(args, new_args)

        if not is_equal then
            display notification "フォルダ内のアイテムが変更されました"
            set args to new_args
        end if
    end try
end main

on findall(dir)
    do shell script "bash -s <<'EOF' - " & quoted form of POSIX path of dir & "
cd \"$1\" && find . ! -name '.DS_Store'
EOF" without altering line endings
end findall

on compare(s1, s2)
    do shell script "bash -s <<'EOF' - " & quoted form of s1 & " " & quoted form of s2 & "
[[ \"$1\" == \"$2\" ]] && echo 'true' || echo 'false'
EOF"
    return result as boolean
end compare

2018/10/29 21:45 nao290 への返信

失礼致します。


1)Automator.appには、フォルダ内のファイルを取得するアクション(『フォルダの内容を取得』)や、それらのファイルを条件に応じてフィルタリングするアクション(『Finder項目を検索』)、そして、通知を表示するアクション(『通知を表示』)があります。 


2)フォルダの内容を常時監視するには、1)のアクションを使った処理を定期的に繰り返す処理が必要になります。 Automator.appには、『ループ』アクションがあるのですが、これは、繰り返しの回数か継続時間を限定しなければならず、常時監視する処理には使えなさそうです。

ループアクションを使って Automator ワークフローの一部を繰り返し実行する - Apple サポート


3)一方で、AppleScriptには常時起動型のアプリケーションを作成する機能と、定期的に処理を繰り返すIdle ハンドラーがあります。 なので、AppleScriptを使うことでお望みの処理を実行できそうです。 こちらのヘルプを確認してみてください。


4)UNIXのコマンドにも同様のものがありそうですが、私はあまり詳しく無いのでよくわかりません。 また、App Storeを検索してみると使えそうなアプリも見つかるかもしれません。

2018/10/30 14:10 nao290 への返信

このアプリケーションで何をしてるかをざっくり説明すると、指定したフォルダ内にあるサブフォルダ内も含めた全ファイル (ただし .DS_Store を除く) のリストを10秒毎に作成して新旧リストの比較をし、変更があった場合は通知する...という仕組みです。


なので、リストの比較前に変更を元に戻した場合 (例: ファイル追加直後に削除) は反応しません。また、複数のファイルを追加/変更/削除した場合の通知回数は1回だったり複数回だったりと結構アバウトです。


その辺をしっかり作り込むとなると、AppleScript ではちょっと難しいと思います。ただ、これでもそれなりに使えるんじゃないかなと。


あと、監視対象フォルダを変更したい場合は、作成したアプリケーションを一旦スクリプトエディタで開き、そのまま保存してください。そうすることで、内部に保存された情報がクリアされ、次回起動時にダイアログが表示されます。カッコ悪いですが、まあ、ご愛嬌ということで。

2018/10/29 20:57 Hiro__S への返信

追記:


私は High Sierra を導入してから数ヶ月しか経っておらず、フォルダアクションの挙動について、まだよく把握してませんが、Snow Leopard までだとアクションが実行されない場合があり、信頼性は今ひとつでした。その後改良されたとは思いますが、空振りすることがあるかもしれません。

automatorで共有フォルダを監視+通知したい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。