web-dev-qa-db-ja.com

Automatorの「フィルターファインダーアイテム」アクションは壊れていますか?

ディレクトリから特定の拡張子のファイルを削除するAutomatorドロップレットを作成しようとしています。私のワークフローには3つのアクションがあります(デバッグしていないとき):

  1. フォルダの内容を取得する(サブフォルダごとに繰り返す)
  2. ファインダーアイテムのフィルター(ファイル拡張子は「一部」)
  3. Finderアイテムをゴミ箱に移動する

私に問題を与えているように見えるのは#2です。私が何をしても、ファイルがフィルターを通過することはありません。 [フォルダーの内容を取得]やその他のFinderアクションの結果を展開すると、常に結果にファイルが表示されます。しかし、最も許容度の高いフィルターを指定しても、このアクションでは何も生成されません。

これをデバッグしたい場合は、新しいアクションを一番上に挿入します。指定されたFinderアイテムを取得し、ファイルが含まれているディレクトリにドロップします。ただし、技術的には「Finderアイテムのフィルタ」でもフォルダを返すことができるはずです。

更新

私は今ライオンにいて、まったく同じ振る舞いを見ています。また、手順2の基準を「名前が「part」で終わる」に置き換えてみましたが、それでも違いはありませんでした。私は最終的に同じタスクを実行するAppleScriptを書くことになりました(以下を参照)。

3
Dov

スポットライトのプライバシー設定を確認してください。作業中のフォルダーがスポットライトによってインデックス付けされていない場合、filterコマンドは何も検出しません。

2
Psi

私もこのファインアクションに苦労してきました。私は、受信ファイルをダウンロードフォルダーにフィルターして処理するフォルダーアクションをテストしてきました。私のテストでは、新しいファイルがSpotlightインデックスに表示されるまでに2秒以上かかる場合があります。そのため、アクションスクリプトの先頭に単純な「待機」を配置する必要がありました。これは2秒に設定すると機能するように見えましたが、最近はそれを増やす必要があり、5秒は信頼できるようです。実際には、アクションスクリプトを使用して縮小し、AirDropを介してiPhoneからラップトップに送信するJPEG写真に変換するため、これは問題ありません。 5秒の遅延は問題を引き起こしません。

0
Alex

私は同じタスクを実行するためにAppleScriptを作成しましたが、Automatorに何か問題があると思うので(またはそれについて基本的なことを理解していないので)、この答えを受け入れません。これは、1つ以上のフォルダーを受け入れ、.partで終わるすべてのファイルを削除するドロップレット用のAppleScriptであり、現在(Snow LeopardとLionで)何ヶ月も問題なく動作しています。

on open theItems

    repeat with theItem in theItems
        set theInfo to info for theItem

        --Verify dropped items are folders
        if not folder of theInfo then
            my warnUser(theInfo's name)
        else
            --Empty out the .part files
            my removePartFiles(theItem)
        end if
    end repeat
end open

on run
    my warnUser(missing value)
    -- Used for debugging
    --my removePartFiles("Macintosh HD:Users:Username:Some Test Folder:" as alias)
end run

-- Calls itself recursively
on removePartFiles(RootDirectory)
    tell application "Finder"
        delete (every file of RootDirectory whose name ends with ".part")

        set subFolders to folders of RootDirectory
        repeat with eachFolder in subFolders
            my removePartFiles(eachFolder)
        end repeat
    end tell
end removePartFiles

on warnUser(itemName)
    set msg to "Please drop folder(s) onto me"
    if itemName is not missing value then set msg to "'" & itemName & "' is not a folder"

    display alert msg as warning buttons {"OK"} default button "OK"
end warnUser
0
Dov

(ワークフローの前半のように)フォルダーに新しく追加されたファイルが結果から欠落しているようです。たとえば、添付したワークフローの画像を参照してください(最初はフォルダの内容を取得するだけです)。

enter image description here

0
Ben