1

DNG/XMP ファイルの管理に役立つ自動化アクションを作成したいと考えています。DNG と一致する XMP ファイルをゴミ箱に送信するアクションに DNG (または複数) をドラッグできるようにしたいと考えています。ファイルは拡張子を除いて同じ名前で、同じディレクトリにあります。たとえば、IMGP1361.DNG および IMGP1361.xmp

これはシェル スクリプトの簡単な作業ですが、Automator でそれを行う方法はありますか (Automator について詳しく知るため)。入力ファインダー項目のファイル名を取得し、それを変数に変更して、それを別のアクションへの入力として使用する方法はありますか?

ありがとう。

4

2 に答える 2

2

Automator 用のこのスクリプトは、同じプレフィックスを共有し、名前拡張子が grep コマンドにリストされているすべてのファイルを削除します。拡張機能を追加することもできます。(xmp|DNG|pdf|xls)

on run {input, parameters}
try
    repeat with anItem in input
        tell (info for anItem) to set {theName, theExt} to {name, name extension}
        set shortName to text 1 thru ((get offset of "." & theExt in theName) - 1) of theName
        tell application "Finder"
            set parentFolder to parent of anItem as alias
            set matchList to every paragraph of (do shell script "ls " & POSIX path of parentFolder & " | grep -E '" & shortName & ".(xmp|DNG)'")
            delete (every file of parentFolder whose name is in matchList)
        end tell
    end repeat
end try
end run
于 2012-03-12T12:06:55.947 に答える
1

はい、わかった。以下のAppleScriptは、次のようなAutomatorワークフロー内で使用できます。

Automatorワークフロー

Finderで選択したすべてのファイルについて、その拡張子がにある場合、そのファイルext_listはゴミ箱に移動されます。同じフォルダにある同じ名前の他のすべてのファイルも、拡張子が。にあるファイルの1つになりalso_these_extensionsます。

これは、たとえば、補助LaTeXファイルを使用してフォルダーをクリーンアップする場合にも役立ちます。他のすべての拡張子(など)をに"tex"入れるだけです。ext_list"aux", "dvi", "log"also_these_extensions

選択したファイルは同じフォルダ内にある必要はありません。Spotlight検索結果ウィンドウで複数のアイテムを選択することもできます。

on run {input, parameters}
    -- for every item having one of these extensions:
    set ext_list to {"dng"}
    -- also process items with same name but these extensions:
    set other_ext_list to {"xmp"}

    tell application "Finder"
        set the_delete_list to {}
        set delete_list to a reference to the_delete_list
        -- populate list of items to delete
        repeat with the_item in input
            set the_item to (the_item as alias)
            if name extension of the_item is in ext_list then
                copy the_item to the end of delete_list
                set parent_folder to (container of the_item) as alias as text
                set item_name to text 1 thru ((length of (the_item's name as text)) - (length of (the_item's name extension as text))) of (the_item's name as text)
                repeat with ext in other_ext_list
                    try
                        copy ((parent_folder & item_name & ext) as alias) to the end of delete_list
                    end try
                end repeat
            end if
        end repeat
        -- delete the items, show info dialog
        move the_delete_list to the trash
        display dialog "Moved " & (length of the_delete_list) & " files to the Trash." buttons {"OK"}
    end tell
end run
于 2012-03-12T11:29:01.123 に答える