HOME > AppleScript > パスつきzipを解凍してThumbs.db削除


--要 Mac OS X 10.4 以上、StuffIt Expander 10.0.1 以上 (ぐらい?)

with timeout of 86400 seconds

tell application "Finder"
activate
if selection is {} then
beep
display dialog "何も選択されていません" buttons {"OK"} default button 1
return
else
set selectedArchives to selection
set archivesAsAlias to {}
repeat with thisOne in selectedArchives
if (((kind of thisOne) as string) contains "archive") and ((name extension of thisOne) is "zip") then set archivesAsAlias to archivesAsAlias & (thisOne as alias)
end repeat
if archivesAsAlias is not {} then
set passwd to text returned of (display dialog "解凍パスワードを入力:" & return & "" default answer "")
else
beep
display dialog "選択された項目は" & return & "このスクリプトでは扱えません。" buttons {"OK"} default button 1
return
end if
end if
end tell

tell application "StuffIt Expander"
activate
set expandResult to {}
repeat with thisOne in archivesAsAlias
set expandResult to expandResult & (expand thisOne password passwd)
end repeat
quit
end tell

tell application "Finder"
activate
if expandResult is not {} then
display dialog "解凍時に作成された項目内で" & return & "次のファイル名を検索し削除します。" & return & return & "Thumbs.db" & return & "_CATALOG.VIX" & return & "_thumbnl.sue"
end if
end tell

set thePaths to ""
repeat with i from 1 to (number of items of expandResult)
set thePaths to thePaths & (quoted form of (POSIX path of ((item i of expandResult) as alias))) & space
end repeat

set theFiles to (do shell script "find " & thePaths & "\\( -iname Thumbs.db -or -iname _CATALOG.VIX -or -iname _thumbnl.sue \\)")

if theFiles is "" then
beep
tell application "Finder" to display dialog "何も見つかりませんでした" buttons {"OK"} default button 1
else
set paragraphNum to 0
set pathList to {}
set targetFiles to ""
repeat with i from 1 to (number of paragraphs of theFiles)
set pathList to pathList & (paragraph i of theFiles)
set paragraphNum to (paragraphNum + 1)
set targetFiles to targetFiles & space & (quoted form of (paragraph i of theFiles))
end repeat
tell application "Finder" to if (choose from list pathList with prompt (paragraphNum as string) & "個のファイルが見つかりました。" OK button name "削除" with empty selection allowed) is false then return

try
do shell script "rm" & targetFiles
beep
tell application "Finder" to display dialog "完了しました。" buttons {"OK"} default button 1
on error
set theConS to ""
set toughFiles to ""
set toughFilesList to {}
repeat with i from 1 to (number of paragraphs of theFiles)
set theContainer to do shell script "dirname " & (quoted form of (paragraph i of theFiles))
if (do shell script "ls " & (quoted form of theContainer)) is not "" then
set toughFiles to toughFiles & (quoted form of (paragraph i of theFiles)) & space
set toughFilesList to toughFilesList & (paragraph i of theFiles)
set theConS to theConS & (quoted form of theContainer) & space
end if
end repeat
if toughFiles is "" then
beep
tell application "Finder" to display dialog "完了しました。" buttons {"OK"} default button 1
else
beep
tell application "Finder" to choose from list toughFilesList with prompt "通常の手順では削除できない項目がありました。" & return & "消すべきでないファイルかも知れません。" OK button name "再度試す" with empty selection allowed
if result is not false then
if (last word of (do shell script "whoami | id -p")) is "admin" then
set aDMN to (do shell script "whoami")
else
tell application "Finder" to set aDMN to text returned of (display dialog "管理者のユーザ名を入力:" & return & "" default answer "")
end if
tell application "Finder" to set myPassword to text returned of (display dialog "・強制的に削除を試みます。" & return & "・ファイルの親フォルダのロック解除を試みます。" & return & return & "管理者ユーザ名: " & aDMN & return & "管理者パスワードを入力:" & return & "" default answer "" with hidden answer)
try
do shell script "sudo chflags nouchg " & theConS & ";rm -f " & toughFiles user name aDMN password myPassword with administrator privileges
beep
tell application "Finder" to display dialog "完了しました。" buttons {"OK"} default button 1
on error
set survivorList to {}
repeat with i from 1 to (number of items of toughFilesList)
set theContainer to do shell script "dirname " & (quoted form of (item i of toughFilesList))
if (do shell script "ls " & (quoted form of theContainer)) is not "" then
set survivorList to survivorList & (item i of toughFilesList)
end if
end repeat
if survivorList is {} then
beep
tell application "Finder" to display dialog "完了しました。" buttons {"OK"} default button 1
else
tell application "Finder" to choose from list survivorList with prompt "以下の項目を削除できませんでした。" OK button name "お手上げ" with empty selection allowed
end if
end try
end if
end if
end try
end if

end timeout

(*
●パスワードが間違っていてもStuffIt ExpanderはAppleScriptにエラーを返さず解凍を続けようとする。
いつまでも解凍が終わらないときはStopボタンで中断。

●圧縮ファイルの中にさらに圧縮ファイルがあるとエラーになることがある。

●複数のStuffIt Expanderがインストールされている場合は
tell application "StuffIt Expander"
という部分をフルパスに書き換えると確実に10.0を起動できる。
書き換え方の例:
tell application "Macintosh HD:Applications:Utilities:StuffIt 10.0:StuffIt Expander.app"

●テストのためのサンプルがzipしかなかったのでzipのみが対象。圧縮後エンコードしたものも対象外。
他の拡張子も試したい場合は
if (((kind of thisOne) as string) contains "archive") and ((name extension of thisOne) is "zip") then set archivesAsAlias to archivesAsAlias & (thisOne as alias)
という行から
and ((name extension of thisOne) is "zip")
を削除すると、種類(kind)に"archive"という文字が含まれるすべてのファイルが対象になる。

●delete originals オプションをtrueにしても元ファイルが削除されない。もっともそのほうが安全だが。

●"Create surrounding folder"の設定に関わらず、expand命令で解凍すると自動的にフォルダが作成される模様。resultのリストが膨大にならないための配慮か?
*)

HOME > AppleScript > パスつきzipを解凍してThumbs.db削除

TOP

created: 2005-12-14T05:01:00+09:00
last modified: 2006-04-04T00:37:26+09:00
author: AquaBowler