コマンドラインからMacのゴミ箱へ捨てる

このところ超忙しいので、時間捻出のためにプログラミングに関わることはしない&それに類するブログとかも書かない、という禁を自らに課していたのですが、どうしても後で忘れそうな本件、忘れたくない・・(というか調べ直したくない・・)という気持ちの方が上回ったのでザザッ!と書いてしまいます。

せっかくなので(?)目次機能も使ってみよう。

結論

以下で紹介されているツールを使います。
rcmdnk.github.io

続編記事もありました。
rcmdnk.github.io

詳しくはそれらを見て頂くとして、以下では後から自分でいろいろ思い出しやすいように、エッセンスだけメモしていきます。

経緯

コマンドラインから不要なファイルやディレクトリを削除しようと思ったら、普通は「rm」を使うと思いますが、これだといわゆるMacのゴミ箱には入らないので、ああ復活させたいな、と後から思ってもできません。

一方、コマンドラインでサクッとrmするのも結構お手軽なので、まあコレなら復活させる可能性ないし、とか思ってサクサクやってしまうのも日常だったりして。

とはいえ、バックアップできることならそれに越したことないので、そういう方法ないかなあ、と探していたら上記のツール(というかシェルスクリプト)を見つけました。

最初は、Homebrewで入れる別のツールが検索で引っかかりやすかったんですが、上記の記事を読んでいたら、そこで公開されているスクリプトで充分というか、むしろ非常に妥当な対処法であるように思えて、それにしました。

設定

設置の仕方は様々ありますが、僕の場合は以下のレポジトリをDL(git cloneでもzipでも)してきて、
github.com

その中のbinディレクトリに入ってるtrashというスクリプトを実行するように、.bashrcなどにエイリアスを設定。(具体例は下記)

基本的には、それだけ。

追記: この設置方法だと、trashがrequireしているsentakuというツールを別途でインストールする必要がありました。
GitHub - rcmdnk/sentaku: Utility to make sentaku (selection, 選択(sentaku)) window with shell command.

もしsentakuがないまま使おうとすると、

Install sentaku (https://github.com/rcmdnk/sentaku) first.

というメッセージが出てきます。

後述のHomebrewやcurl*1等を使ったインストールであれば、初めからsentakuも同梱されているようなので、とくに気にする必要はなさそうですが、僕は以前に別途でsentakuをインストールしていたので、上記では触れそびれていました。

(追記ここまで)

で、冒頭の記事で作者さんがそうしているように、僕もエイリアスのコマンド名は「rm」ではなく「del」としました。

というのは、エイリアス名を「rm」にした場合、万一これが利いてない環境なのにこれを使ってるつもりで「rm」してしまって(使ってるマシンが違ったとか)、「へへ〜、ちゃんと復活できるもんね〜」とか思ってたけど復活できない、という悲惨な目に遭う可能性があるので、最初からこのスクリプトを使う前提のコマンドを別立てしたほうが安全かなと。

で、その他にREADMEで紹介されている設定を合わせて.bashrcに記載。僕の場合は全部でこんな感じです。

alias del="/path/to/github.com/rcmdnk/trash/bin/trash -r"
export TRASHLIST=~/.trashlist # Where trash list is written
export TRASHBOX=~/.Trash # Where trash will be moved in
                         # (.Trash is Mac's trash box)
export MAXTRASHBOXSIZE=1024 # Max trash box size in MB
                            # Used for clean up
export MAXTRASHSIZE=`echo $MAXTRASHBOXSIZE "*" 0.1|bc -l|cut -d. -f1`
# Trashes larger than MAXTRASHBOXSIZE will be removed by 'rm' directly

って、1行目以外はREADMEそのままでした。

オプション

以下のヘルプにもあるとおり、

-r              Remove directory (default: $rdir)
-f              Remove w/o confirmation (default: $force)
-i              Remove w/ confirmation (default: $confirm)
-t <trash_box>  Use given trash box instead of $tbox
-c              Clean up trash box (make it less than MAXTRASHBOXSIZE)
-C              Clean up trash box (make it empty)
-l              List up deleted files/directories in the trash box
-b              Restore (turn Back) the file from the trash box
-v <level>      Verbose level for list view
                0 : Only original location (default).
                1 : With Delete date-time (yyyymdd-hh:mm).
                2 : With Current location (in the trash box).
-V              Show version
-h              Show help

シンプルなオプションも充実しており、その他、READMEで紹介されているリストア・モードの挙動なども直感的で素敵です。

僕なんかは結構意味もなく

$ del -lv1

とかやって、ああこれらを削除したんだな〜って眺めて気晴らししたりしています。(謎)

あと、僕は基本的にMacで使っていますが、むしろ威力を発揮するのはLinuxなんかを使うときでしょうかね。

インストールの仕方もMacならHomebrew、それ以外にもwgetcurlなどいろんな方法が冒頭の記事では紹介されていますので、興味を持った方は参考にしてみてください。

書くのに1時間かかってしまった・・やはりもうしばらく禁止しよう。

*1:ちなみに、別の環境でcurlを使ってtrashをインストールしたところ、実行権限が付いてなかったようでchmod +x trashをやったら動きました。