moreutils の中の便利そうなコマンド : sponge と vidir

moreutils という便利コマンド集があって、Yum とか Homebrew とかで簡単に入れられるので試してみた。今回はその中でも特に有用そうな2つのコマンド、spongevidir を紹介する。

目次

moreutils のインストール方法

moreutils は OS に合わせて以下のようなコマンドでインストールすればよい。今回は MacOS (Homebrew) でインストールしたモノで試した。

# MacOS (Homebrew)
$ brew install moreutils

# CentOS (Yum)
$ yum install -y moreutils

# Ubuntu (apt)
$ apt install -y moreutils

# Windows GitSDK・Archi Linux (Pacman)
$ pacman -S moreutils

sponge

まず紹介するのは sponge コマンド。コレを使うと、入力と出力に同じファイルを利用できる。

例えば、example.txt の内容を読み込み、変換処理を加えて、結果を同じ example.txt に出力したくて、以下のようなコマンドを書いたとする。

$ sed 's/aaa/AAA/g' < example.txt > example.txt

このコマンドを実行すると、example.txt の中身は空になってしまう。まぁ sed に関しては -i オプションで上書き保存はできるのだが、あくまで一例として。

で、リダイレクト > の代わりに、パイプ |sponge コマンドを使うと、上のようなことが思ったとおりに実現できるようになる。

$ sed 's/aaa/AAA/g' < example.txt  | sponge example.txt

こんな感じ。

vidir

vidir は、Vim っぽい画面でカレントディレクトリ配下のファイルやディレクトリ名をリネーム・削除できるツール。

$ vidir

と叩くと Vim 風な画面が現れ、カレントディレクトリ配下のファイルとディレクトリが見える。ココまでは $ vi ./ と叩いた時と似たように見える。

この状態で編集モードに入ると、ファイル名を書き換えたりでき、それを保存して終了すると実際にファイルがリネームされている。

Vim の矩形選択を覚えれば、複数ファイルの一括リネームが可能になるので、Vim における矩形選択の手順を紹介しよう。

保存時は wq で終了すれば良いし、取り消したければ q! でキャンセルして終了すれば良い。

ディレクトリやファイルの削除にも対応していて、行ごと削除すればファイル削除される。ただし、ディレクトリは中が空でないと削除できない。

以上

シェル芸の幅が広がりそうなので、moreutils 覚えておこう。