一度に1つのアイテムのみを処理する監視フォルダー?


1

追加した各アイテムでスクリプトを実行する監視フォルダーを設定する必要があります。ただし、1つのアイテムを処理するのに10分以上かかる可能性があります。

私がやったことは、このコードをスクリプトの先頭に置き、フォルダーを監視し続け、何かが追加されたときに動作するようにすることです:

set watchFolderAlias to (POSIX file watchFolder as alias)
set r to {}
repeat
    tell application "Finder" to set r to ¬
        (sort (get files of watchFolderAlias whose kind is "alias") ¬
            by creation date)
    if (count of r)  0 then
        do(first item of r as alias)
    end if
    delay 5
end repeat

on do(x)
   (* do 10 minutes of stuff with x *)
end do

...そして、それを実行し続けます。しかし、これは面倒で厄介です。

しかし、もしdo()ものをフォルダアクションとしてアタッチすると、アイテムが追加されるとすぐに新しいインスタンスが起動します...

よりエレガントなソリューションがありませんか?

(明確にするために:フォルダーアクションスクリプトをフォルダーにアタッチすると、そのスクリプトは別のインスタンスが既に実行されているかどうかに関係なく、フォルダーに項目を追加するたびに1回、複数回起動されます。たとえば、10個のアイテムが監視フォルダーにドロップされ、最初の10個のアイテムがまだ処理されている間に別の5個のアイテムがドロップされると、スクリプトの2番目のインスタンスが起動します。

私が思いつくことができる他の唯一のことは、スクリプトによって「ビジー」に設定される「ステータス」ファイルを維持し、処理が完了すると「アイドル」になり、スクリプトの他のインスタンスが「アイドル」状態...しかし、これも厄介です。

回答:


1

https://www.noodlesoft.comからHazelをお試しください

これほど長いプロセスはありませんでしたが、私の経験では、Hazelは常にファイルを順番に処理しているようで、古いプロセスが完了するまで新しいプロセスを開始しません。

これは非常に貴重なMacアプリ、IMOです。フォルダーアクションの代わりに排他的に使用します。それは有料アプリですが、無料のフル機能のデモが利用可能です。開発者も非常に親切で、アプリはよく管理されています。強くお勧めします。

あなたが言及したように、他の唯一の選択肢はロックファイルであると思いますが、これは厄介です。


私は何年もヘイゼルを使ってきました。それは素晴らしいです。しかし、外部Applescriptを使用している場合、アイテムを1つずつ処理することに気づきませんでした。それをテストする必要があります。ありがとう。(しかし、私はまだ「ネイティブ」ソリューションを好むでしょう。)
ダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.