123
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

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

背景: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:

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
123
Help us understand the problem. What are the problem?