applescript で Thumbs.db削除したい

mac os 10.5.8 で下記のような applescript を作成しましたが、

Thumbs.db ファイルが削除されません。


try


setafoldertochoose folderwith prompt"DS_Store ._ がつく、すべてのファイルを削除するフォルダを選択"


setanstodisplay dialog"対象フォルダ以下のフォルダも対象にしますか?"buttons{"いいえ","はい"}default button2


ifbutton returnedofansis"はい"then


setsubfoldertotrue


else


setsubfoldertofalse


endif



setufoldertoPOSIX pathofafolder


ifsubfolderthen


setmycommand1to"find \""&ufolder&"\" -name .DS_Store -exec rm {} \";\""


setmycommand2to"find \""&ufolder&"\" -name \"._*\" -exec rm {} \";\""


setmycommand3to"find \""&ufolder&"\" -name Thumbs.db -exec rm {} \";\""


else


setmycommand1to"rm \""&ufolder&".DS_Store\""


setmycommand2to"rm \""&ufolder&"._*\""


setmycommand3to"rm \""&ufolder&"Thumbs.db\""


endif



do shell scriptmycommand1


do shell scriptmycommand2


do shell scriptmycommand3




display dialog"処理は終了しました。"

onerrorerr


display dialogerr&return&"エラーが発生しました。終了します。"


endtry

PowerMac G5-OTHER, Mac OS X (10.4.11)

投稿日 2011/12/14 03:41

返信
返信: 7

2011/12/19 04:55 jan-ken への返信

例えば、choose folder で、folder"001 というフォルダを選択した場合、ダブルコーテーションがエスケープされないままになるので find で構文エラーとなります。このような場合は、quoted form of を使います。


詳細はAppleのドキュメント※1を見ながら研究してください。で、もし???な場合はやめておいた方が良いかもしれません。あれこれ書き換えているうちに「必要なファイルまで削除」という可能性もありますから。


find -> rm は便利な反面とても危険。さらに、do shell script はターミナルからシェルスクリプトを実行するより危険(途中で止められない、デフォルト作業ディレクトリが「/」等々)なので、万が一を考えると...。私も怖かったりします(笑)


明確な答えじゃなくて申し訳ありませんが以上です。


※1: do shell script のドキュメント

http://developer.apple.com/jp/technotes/tn2002/tn2065.html

http://developer.apple.com/library/mac/#technotes/tn2065/_index.html


動作確認

・Mac OS X 10.5.8

・Mac OS X 10.6.8

2011/12/26 20:23 Hiro__S への返信

Hiro.S さん、レスありがとうございます。


検証してみました。ダブルクォーテーションを含むフォルダ名を指定しても、

きちんと処理されました(Thumbs.dbも削除されました)。

OSX 10.5.8 にて検証。


(詳しくないため)理由はわかりませんが。。。


しばらく試用してみたいと思います。

2011/12/27 03:24 jan-ken への返信

ん〜なぜ動くのか私も分かりません...。


対象フォルダ: $HOME/Desktop/fol"001


テスト1

ソース: find \"" & ufolder & "\" __省略__

ログ: find \"/Users/foo/Desktop/fol\"001/\" __省略__

結果: error "sh: -c: line 0: unexpected EOF while looking for matching `\"'


テスト2

ソース: find " & quoted form of ufolder & " __省略__

ログ: find '/Users/foo/Desktop/fol\"001/' __省略__

結果: ""


テスト1は "/path/to/folder"001/" と展開され構文エラーになり、テスト2は '/path/to/folder"001/' と展開され正常動作(※1)。Mac OS X 10.4 は不明も、Mac OS X 10.5.8 ではテスト1が動かないはず。それとも私が何かを見落としてるのかな?


暇なときでかまいませんから今一度検証してみてください。なお、テストの際は rm ではなく、ls とすると良いでしょう。


では健闘を祈ります。


----------


※1

一応動きますが、find の結果が /path/to/dir//file となり、ディレクトリ末尾が // なので好ましくありません。これはテスト1にも言えます。


ほかにもこうした方が良いよという箇所があって、スクリプトを既に用意してあるのですが、この状況だと...。やはり公開はやめときます。


----------


当方環境

・Mac OS X 10.5.8 - Script Editor 2.2.1

・Mac OS X 10.6.8 - AppleScript Editor 2.3


動作確認

・Script Editor 2.2.1 でコンパイルし、スクリプト形式で保存したものを Mac OS X 10.5.8 で確認

・同スクリプトを Mac OS X 10.6.8 で確認

・AppleScript Editor 2.3 でコンパイルし、スクリプト形式で保存したものを Mac OS X 10.6.8 で確認

・同スクリプトを Mac OS X 10.5.8 で確認

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

applescript で Thumbs.db削除したい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。