InDesignのリンク切れ画像をMac上から検索収集
InDesignのリンク切れ画像がMac上のどこかに存在すれば、
InDesignファイルと同階層に収集してくれるスクリプトです。
収集された画像が間違っている可能性もあるので注意して使ってください。
また、Spotlightの情報を利用しているので、
Spotlightに異常が生じてる場合は、上手く動作しません。
そういう場合は、Spotlightのインデックスを再構築してください。
再構築には、数十分かかると思います。
なお、「新規スマートフォルダ」をある条件で設定して保存し、
保存したフォルダを「Command + i 」で情報も見ると、
クエリーのところに情報が表示されるので、
検索条件の参考になるかも知れません。
▼参考情報
Mac Spotlightの検索インデックスのデータベースを再作成する方法 / Inforati
▼AppleScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
set result to display dialog "Link画像の変更日時の誤差範囲を入力してください。(秒数)" & return & "丸1日の範囲だと、3600秒*24時間 = 86400" default answer "0" set result1 to text returned of result try set result1 to result1 as integer if result1 < 0 then activate display dialog "入力し直してください。" buttons {"OK"} default button 1 return end if on error display dialog "数字をを入力してください。" buttons {"OK"} default button 1 return end try set TimeRange to result1 / 2 as integer tell application id "com.adobe.InDesign" if (count of document) = 0 then activate display dialog "ドキュメントを開いてください。" buttons {"はい"} default button 1 with icon 0 if button returned of result = "はい" then return end if try tell document 1 set graphiclist to every link whose status is link missing set save_folder to file path as Unicode text end tell on error return end try set graphicCount to count of graphiclist set graphicNameList to {} set LinkList to {} repeat with g from 1 to graphicCount set thisimage to properties of item g of graphiclist set graphicName to name of thisimage set graphicStatus to status of thisimage if (graphicName is not in graphicNameList) then --重複ファイルはスルー set graphic_file_Path to file path of thisimage set modification_date to (date of thisimage) set image_size to (size of thisimage) --正確でない? set the end of graphicNameList to graphicName set the end of LinkList to {graphicName, graphic_file_Path, modification_date, image_size} end if end repeat end tell set successList to {"▼収集/成功リスト" & return} set errorList to {"▼収集/失敗リスト" & return} repeat with L in LinkList set {graphicName, graphic_file_Path, modification_date, image_size} to L set modification_UnixTime to dateToUnixtime(modification_date) of me --978274800--2001-01-01 00:00:00 --更に9時間引くと(9.783072E+8) set AbsoluteTime_m to (modification_UnixTime - 9.783072E+8) set mdfindRes to do shell script "mdfind \"kMDItemDisplayName == " & quoted form of graphicName & ¬ " && InRange(kMDItemFSSize," & image_size & "," & image_size * 2 & ") ¬ && InRange(kMDItemContentModificationDate," & my real2Str(AbsoluteTime_m - TimeRange) & "," & my real2Str(AbsoluteTime_m + 3 + TimeRange) & ")\"" if mdfindRes ≠ "" then set mdfindRes1 to paragraph 1 of mdfindRes set mdfindRes1POSIX to quoted form of mdfindRes1 set save_folder_POSIX to quoted form of POSIX path of save_folder try do shell script "cp -p " & mdfindRes1POSIX & " " & save_folder_POSIX end try set the end of successList to graphicName & return --graphicName/POSIX path of graphic_file_Path else set the end of errorList to graphicName & return --graphicName/POSIX path of graphic_file_Path end if end repeat if (count of LinkList) ≠ 0 then activate display dialog "●結果" & return default answer (successList & return & return & errorList as Unicode text) buttons {"OK"} default button 1 else activate display dialog "リンク切れは、ありませんでした。" buttons {"OK"} default button 1 end if --更新日をユニックスタイムに変換 on dateToUnixtime(ResDate) set y to year of ResDate set m to month of ResDate as number set d to day of ResDate set t to time string of ResDate set allT to (y & "-" & m & "-" & d as text) & " " & t set unixtime to do shell script "date -j -f '%Y-%m-%d %H:%M:%S' " & quoted form of allT & " +%s" return unixtime end dateToUnixtime --数字の指数表示を標準に戻す。必要ないかも? on real2Str(theNum) set pythonString to do shell script "python -c 'print " & theNum & "'" return pythonString end real2Str |