シェルコマンドラインとapplescriptの間でクロスを使用することで、これを簡素化できます.
set jpegSearch to paragraphs of (do shell script "mdfind -onlyin / 'kMDItemContentType == \"public.jpeg\" '")
mdfindコマンド_
中央のメタデータ ストアを参照し、指定されたメタデータ クエリに一致するファイルのリストを返します。クエリは、文字列またはクエリ式にすることができます。
私の知る限り、これはスポットライトが使用するものです。
mdfindドキュメントを参照すると、このコマンドがどのように機能するかがわかります。ただし、このスクリプトは " / " のみを検索し、public.jpeg であるコンテンツ タイプ属性を探します。
リターンはテキストです。一致するファイルの POSIX パスのリスト。このテキストは、新しい行の各パスのテキスト ドキュメントのようなものですが、Applescript に関する限り、実際には 1 つのアイテムです。
それらは、applescript リストに分割する必要があります。そのため、結果の段落を要求することでこれを行います。
また、新しいファインダー ウィンドウを開きたい場合:
次のようなものを試してください:
tell application "Finder"
activate
set myWindow to make new Finder window to startup disk
end tell
ファイルのターゲットのPOSIXパスを取得しようとしてエラーが発生する理由に答えるには。
検索ウィンドウに返されたファイルの 1 つのプロパティを見ると、
tell application "Finder" to set fileList to properties of first file of front window
ファイルのプロパティに元のアイテムという名前のプロパティがあることがわかります
あなたが本当にあなたがやっている方法でそれをやりたいのなら、1つの方法はオリジナルのアイテムを手に入れることです. 結果をエイリアス形式に変換してから、posix パスを取得します。
tell application "Finder" to set aFile to POSIX path of (original item of first file of front window as alias)
通常のファインダーウィンドウで使用できます。
tell application "Finder" to set fileList to POSIX path of (first file of front window as alias)
これらは、何が起こっているかを示すための単なる例です。
ファインダ ウィンドウの結果のタイプの違いは、検索ウィンドウに表示されるのは元のファイルのエイリアス ファイル (class:alias ファイル)、つまり元のアイテム プロパティであるためです。
更新 2。
リスト内のアイテムを調べて、別のリストと照合するのは簡単です。
Apple には、コード作成に役立つツールがいくつかあります。
スクリプトの場合。
crtl+ マウス jpg の結果をリストとして保持する変数をクリックします。
これにより、ヘルパー コードを含むコンテキスト メニューが表示されます。メニューの [繰り返しルーチン] フォルダーに移動します。
次に、「すべてのアイテムを処理する」
これにより、繰り返しルーチンがコードに追加されます。
そこから、それを使用して、各アイテムを他のリストと照合することができます。
set yourOtherList to {"/Library/Desktop Pictures/Abstract/Abstract 2.jpg", "/Library/Desktop Pictures/Abstract/Abstract 1.jpg"}
set jpegSearch to paragraphs of (do shell script "mdfind -onlyin / 'kMDItemContentType == \"public.jpeg\" '")
repeat with i from 1 to number of items in jpegSearch
set this_item to item i of jpegSearch
if this_item is in yourOtherList then
-- do something
log this_item
end if
end repeat
繰り返しルーチンは次のように機能します。
指定されたリスト内の各項目をループします
アイテム 1 からリスト内のアイテムの数まで反復します。
i変数は、ループの反復回数を保持します。つまり、最初のループでは 1 になり、300 回目のループでは 300 になります。
したがって、最初のループ で this_item を jpegSearch の項目 i に設定することは、 set this_item を jpegSearch の項目 1 に設定することと同じです。
しかし、Apple では、 Repeat with i ..を使用して、各項目の各番号を書き込む必要がありません。
変数iは、通常の許可された変数命名構文に準拠する、選択した任意の単語または文字にすることができます。
できることは、一致したアイテムから新しいリストを作成することです。それらを以前に宣言されたリストにコピーすることによって。繰り返しループが完了したら、そのリストで作業できます。
ここでbigListは空のリストとして宣言されています{}
一致したアイテムは bigListにコピーされます。受け取った新しいアイテムはそれぞれ、リストの最後に追加されます。
set bigList to {}
set yourOtherList to {"/Library/Desktop Pictures/Abstract/Abstract 2.jpg", "/Library/Desktop Pictures/Abstract/Abstract 1.jpg"}
set jpegSearch to paragraphs of (do shell script "mdfind -onlyin / 'kMDItemContentType == \"public.jpeg\" '")
repeat with i from 1 to number of items in jpegSearch
set this_item to item i of jpegSearch
if this_item is in yourOtherList then
copy this_item to end of bigList
end if
end repeat
bigList