Go 言語で rm 用ごみ箱ツール gomi を作った

More than 3 years have passed since last update.


背景:Golang でコマンドラインにゴミ箱を実装した話


logo

b4b4r07/gomi - GitHub


gomi is a simple trash script that works on CLI, written in golang


DEMO


gomi とは

Go 言語製の CLI 向けごみ箱ツールです。ファイルを削除するとき本当に削除する前に、専用のごみ箱(または、システムごみ箱)にプールしておくことができます。


  • ワンバイナリで動作する

  • インタラクティブな操作で簡単にリストアできる

  • 捨てたファイルを QuickLook できる

  • システムのごみ箱と連携もでき「元に戻す」操作もできる

  • YAML 形式の設定ファイルでカスタマイズすることができる

  • Windows でも動く

みなさん、ファイルの削除には rm を使用されると思いますが、誤って重要ファイルを削除してしまうということは初心者もさることながら、たまにやってしまうものです。また、要らないと思って消して数日後に必要性を感じるときなどもあったりしますよね。

この gomi では、削除するまえに一旦専用のごみ箱にプールします。またその時に履歴が保存されるため、あとから簡単に参照することができます。また、インタラクティブな UI で簡単にリストアすることができます。


特徴

同様のごみ箱ツールとして有名なものは、



  • andreafrancia/trash-cli


    Command line interface to the freedesktop.org trashcan.





  • sindresorhus/trash


    Cross-platform command-line app for moving files and directories to the trash - A safer alternative to rm




がありますが、前者は Python、後者は Node.js が求められます。gomi は単一のバイナリで実行環境を選びません。

また、trash-cli はインタラクティブなリストアを可能としていますが、数値によって指定するタイプであまりいい UI とはいえません。trash はシステムのごみ箱と連携できるところが強みですが、(ごみ箱に送ることはコマンドラインで可能なのに)コマンドラインからの簡単なリストアが出来ませんでした。

この gomi では、両者それぞれの欠点を克服し、さらなる特徴としてゴミ箱にあるファイルを QuickLook する機能を持っています。削除したするファイル名はかぶることもあり、内容をササッと確認したい時が結構あります。そんなときに少し覗いてみる機能があると便利です。

gomi が用意しているごみ箱ではなく、システムのごみ箱に送る場合は gomi -s filename としてください。もちろん gomi -r でリストアも可能ですし、ごみ箱の「戻す」機能でリストアすることも出来ます。

quicklook.png


使い方



  1. 削除する :package:

    $ gomi file
    



  2. ごみ箱をあさる :mag:

    $ gomi -r
    


リストアモードの UI は peco をかなり参考に実装しました。また ~/.gomi にあるファイルをもう一度削除すると本当に削除されます。

また、-r に引数を渡すと、そのパスにリストアします(引数を渡さないと元あった場所にリストアする)。gomi -r . とやると、カレントディレクトリにリストア出来ます。

また、YAML 形式の設定ファイルを読み込みます。ignore_files では履歴に残したくないファイルをワイルドカードなどを使用して指定できます(ごみ箱には残る)。


~/.gomi/config.yaml

ignore_files:

- .DS_Store
- "*~"


ファイルを少し覗く

OS X でいう QuickLook 的な機能です。C-q でトグル出来ます。復元したいファイルがどんな内容だったか確認するのに役立ちます。

ディレクトリの場合は、その中身のファイルやサブディレクトリを再帰的に列挙します。

quicklook.png

QuickLook 中でもリストアモードのキーバインドは生きていますので、C-n などで QuickLook しながら次のファイルを行き来したり、Enter でリストアを実行することも出来ます。


クロスプラットフォーム

Windows もいけます。

gomi_windows.png


インストール

Mac ユーザで Homebrew を使っていたら以下で OK です(Linuxには未対応です)。

$ brew tap b4b4r07/gomi

$ brew install gomi

それ以外は以下でインストールするか、GitHub Releases からインストールできます。

$ go get -u github.com/b4b4r07/gomi

バイナリだけなら GitHub Releases にアップロードしてあります。


設定

必須ではありませんが、rm コマンドを gomi で置き換えることをオススメします。タイプ数が2文字減る(gomirm)うえに手グセもそのままにして削除できます。


~/.bashrc

alias rm="gomi"



参考 :books:

結構思いつきと勢いで作成しました。これから(ひとまずは自分用に)メンテしてソースコードと機能を改修していく予定です。