Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
122
Help us understand the problem. What is going on with this article?
@b4b4r07

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

More than 5 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:

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

122
Help us understand the problem. What is going on with this article?
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
b4b4r07
tellme.tokyo
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
122
Help us understand the problem. What is going on with this article?