ゴミ箱の一部だけを空にするサービス

会社のWindows環境では、ゴミ箱に入れたファイルは決して、すぐには削除しない運用でずっと使っていた。今時のハードディスクは大容量なので、仕事で使うファイルがいくらゴミ箱に溜まっても大した問題ではないのだ。(ほとんどが数十MB以下のファイル)ゴミ箱を空にしてしまって、それが必要なファイルだと気付いた時の落胆を考えると、ゴミ箱を大量のファイルで溢れさせておいた方が心安らぐ。

年に一度の大掃除で削除するのは、ゴミ箱に入れて一年以上経過したファイルのみ。一気に千数百ファイルが削除される様子を見ているのは、爽快だ!

ところで、OSXでは、Finderの操作からゴミ箱の一部だけを空に出来ないことに気付いてしまった...。ゴミ箱の中で command-delete した場合は「戻す」のショートカットとして機能し、選択したファイルはゴミ箱に入る前のしかるべき場所に戻るだけ。ゴミ箱から消えたのは「削除」されたのではなく、元の場所へ「戻った」だけなのであった。

ゴミ箱の中には、たぶん不要だけど、いずれ削除するけど、まだもう少し残しておきたいファイルもあったりする。そんな状況の時、ゴミ箱全体を空にする選択肢しかないと、ちょっと困る。ゴミ箱で選択した一部のファイルだけを空にできたらいいのに!いつものAppleScriptで早速、やってみた。

仕様

  • ゴミ箱で選択中のファイルやフォルダを削除する。(空にする)
  • ゴミ箱じゃない場所のファイルを選択している場合は、削除せず、ゴミ箱へ移動する。
  • ゴミ箱の実体は、ホーム直下の.Trash、あるいはボリューム直下の.Trashes である。
  • .Trash、あるいは.Trashesを削除してしまっても困るので、それは出来ないようにした。

Automatorの様子

  • ファイルまたはフォルダを受け取り、Finder.appのサービスとした。

上記サービスを >> ダウンロードする

AppleScriptの様子


on run {input, parameters} (* Your script goes here *)
tell application "Finder"
if input's item 1's name is ".Trash" then
beep
activate
"ゴミ箱は削除できません。"
display dialog result buttons "キャンセル" default button 1 giving up after 5 with icon 2
return
end if
end tell
if ":.Trash:" is in (input's item 1 as text) or ":.Trashes:" is in (input's item 1 as text) then
activate
"選択中のファイルを完全に削除します。
この操作は「取り消し」できません。"
display dialog result with icon 0 default button 1
my rm(input) --削除した時の効果音
"afplay /System/Library/PrivateFrameworks/ScreenReader.framework/Versions/A/Resources/Sounds/MouseDrag.aiff"
do shell script result
else
tell application "Finder" to delete input
end if
end run

on rm(alias_list) tell application "Terminal"
activate
delay 3
--do script "rm -iR" & my args(alias_list) --削除する前に確認する( y で削除)
do script "rm -fR" & my args(alias_list) --確認なしにすぐ削除する
end tell
end rm

on args(alias_list) set args to {} repeat with f in alias_list
set args's end to " \\" & return & f's POSIX path's quoted form
end repeat
args as text
end args

試用

  • ゴミ箱でファイルを選択して、右クリック、サービスメニューを開く。

  • 取り消しできない操作であることを警告する。

  • ターミナルが起動して、コマンドを実行する。(削除した履歴を残すため)
$ rm -fR \
> '/Users/zari/.Trash/名称未設定フォルダ/'


以上で、ゴミ箱の一部だけ空にできた!