端末作業を効率化するRust製ツール

はじめに

プログラム開発やシステム管理では、多くの作業がターミナルでコマンドラインからファイル操作やコマンド実行した結果から何かしらの処理することに多くの時間が割かれています。この資料は、こうした端末作業を効率化するためのツールを紹介しています。

次の基準で選定しています。

  • ライセンスが明記されていること

    • どれほど素晴らしいものでも、ライセンスが明記されていないものは使えないと考えています。

  • README.md で例示されているものが正常に動作すること

  • ほんの少し個人的な好み

Rustの環境構築やツールのインストール方法については以下を参照してください


banner 代替ツール cfonts

ANSI フォントでバナーを生成してれるツールです。/etc/motd やメールのシグネチャを作成するときなどに使えるかもしれません。


カラー出力を制御するLS_COLORSを管理 vivid

vivid は、ls, tree, fd, bfs, dust やその他多くのツールのカラー出力を制御する 環境変数 LS_COLORS のジェネレータツールです。


CLIで色の生成、分析、変換、操作を行う pastel

pastel は、色の生成、分析、変換、操作を行うコマンドラインツールです。RGB (sRGB), HSL, CIELAB, CIELChのような多くの異なる色形式と色空間に加え、ANSI 8ビットおよび24ビット表現もサポートしています。

tee/script 代替ツール teetty

tee や script に少し似ていますが、すべて擬似端末を使ってリモートコントロールやプロセスの監視を可能にします。

od 代替ツール hexyl

hexyl は端末用のシンプルな 16 進ビューアです。カラフルなカラー表示で、異なるカテゴリのバイト (NULL バイト、印刷可能な ASCII 文字、ASCII 空白文字、その他の ASCII 文字、非 ASCII) を区別することが簡単になります。

HEXダンプツール xxd-rs

Linux でよく知られている16進ダンプツール xxd を Rustで実装したCLIツールです。ダンプ内容をCやRust, Pythonのソースコードで生成することもできます。

cp の高速な代替ツール fcp

fcp は cp コマンドを著しく高速にした代替ツールです。fcp は cp の最も一般的な使用例を、より高い性能で処理することを目的としています。

cp の拡張コマンド xcp

xcpは、Unixのcpコマンドの部分的なクローンです。完全な代替品としてではなく、よりユーザーフレンドリーなフィードバックと、特定のタスクで意味のあるいくつかの最適化を施したユーティリティです。 とくにNFSv4マウントされた領域でのコピーは大幅に性能が向上します。

ファイル名を一括で変更する ezr

ezrは、ファイル名を一括で変更するためのシンプルなCLIツールです。コマンド名およびプロジェクト名は EaZy Renamer に由来しています。

正規表現で複数のファイルやディレクトリの名前を変更する frs

frs は、正規表現で複数のファイルやディレクトリの名前を変更するシンプルなCLIツールです。

正規表現とカスタム言語で複数のファイル名を変更する nora_rename

nora_renameは、正規表現を使ってファイル名を一括で変更するためのCLIツールです。正規表現に加えてカスタム言語による高度な制御が可能です。

正規表現で複数のファイルやディレクトリの名前を変更 rnr

rnrは、正規表現をサポートする複数のファイルやディレクトリの名前を安全に変更するCLIです。

ファイル名を一括変更する nomino

nomino は、ファイル名を一括変更するシンプルなCLIツールです。正規表現を使用することもできます。

ファイル名をランダムに生成される文字列に変更するrng-rename

rng-renameは、ファイル名をランダムに生成される文字列に変更するCLIツールです。このツールはデータ分析や機械学習などの領域で便利です。データサイエンティストは、解析の前にデータセットをランダム化したいときがあります。しかし、ファイル名に依存した処理系の場合では、何度やっても同じ順序になってしまいます。こうしたときに、このツールは非常に有益です。

ファイル名に含まれる迷惑文字を置換する unf

ファイル名に含まれるUNIXでの迷惑文字を置換するCLIツールです。ファイル名に含まれる特定の文字は、コマンドラインユーザにとって無視できない重要な問題となります。例えば、スペースや括弧はシェルによって特別に扱われるため、都度エスケープしたり、引用符で囲む必要があり、地味に面倒です。unfはこれらのファイル名を簡単に変更してくれます。

ファイル名正規化ツール normie について

normie は、ディレクトリとファイルの名前をUnixフレンドリーな名前に再帰的に正規化するシンプルなCLIツールです。

S3バケット内のキーを一括リネームする s3rename

s3renameは、S3バケット内のキーを一括リネームするツールです。

重複ファイルの検索と削除 duplink

ディレクトリツリーから重複ファイルを発見し、重複を解消するためのシンプルなCLIツールです

重複ファイルの検索と削除をする fclones

fclones は、ファイルのグループを識別し、不要になったファイルのコピーを削除する高機能なCLIツールです。ファイル名のパタンやの変更時間などで絞り込みや優先度を与えることができます。

ファイルコピーのタイムスタンプメタデータを修復する timetime

ファイルコピーのタイムスタンプメタデータを修復するCLIです。

ファイルの先頭部分と末尾部分を除外する top_n_tail

ファイルや標準入力からテキストを抽出するCLIユーティリティです。
入力の先頭部分と末尾部分が不要なときに重宝します。

head/tail の代替ツール headtail

ファイルの先頭と末尾を同時に表示するCLIユーティリティです。head と tail の 代替ツールです。

範囲式で入力のフィルタリングを行うbtwn

‘1...3' のような範囲式に基づいてstdinから行をフィルタリングするCLIツールです。
headとtailの組み合わせよりも使いやすく便利です。


CLIから2つのファイルをXORする xorfiles

2つのファイルをXORする小さなCLIツールです。

表形式データから行と列を抽出する ock

ockは、表形式のデータを扱うためのCLIツールです。行や列を抽出するという目的では、ほとんどのawkの使用例よりシンプルで高速な代替ツールです。

テキスト入力を行と列でフィルタリングする inslice

ファイルや標準入力からであれ、テキストから特定の行や列を抽出することは、コマンドラインで行う必要がある一般的なタスクです。しかし、awkやtailのような従来の方法は、簡単で直感的な方法とは言えません。
inslice は、Rustで書かれたコマンドラインユーティリティで、この問題に対処することを目的としており、行と列の番号を使って、入力テキストをリテラルかつ明示的に簡単にフィルタリングすることができます。 rowslc とcolslc という2つのバイナリで構成されていて、それぞれ行と列を操作し、シェルのパイプで組み合わせて使用し目的の出力を得ることができます。

フィールド選択が簡単な choose

choose はPythonのスライス構文のようにフィールドを抽出することができるツールです。

テキストを正規表現で分類してカラムやファイルに分割する unweave

nweaveは、テキスト行のストリームを、ストリームごとのカラムやファイルに分離するCLIツールです。各行は、正規表現パターンを使って抽出されたストリームタグに基づいて分類され、キャプチャーするタグや番号を使って個別のファイルに格納することができます。

複数列のテキストから列を抽出する excavate

excavate は、標準入力から一行ずつ読み込んで指定された列を抽出するためのシンプルなCLIツールです。こうした作業は、awk や sed など、より洗練されたプログラムでも可能ですが、より簡単かつ単純に列を抽出できるツールです。Pythonのスライス構文で列を抽出することもできます。同様の処理を行う choose よりも機能が少ないのですが、その分軽量です。

安全で高速にファイルを分割・結合する chopstick

最小限のサイズの実行ファイルで、できるだけシンプルな方法で、安全かつ高速にファイルを分割・結合をを行うCLIツールです。

テキストを行単位で複数のファイルに分割する zsplit-cli

zsplit-cli は、入力されたテキストを行単位で複数のファイルに分割するシンプルなCLIツールです。分布数を与えて分割することや、非均衡な分布数で分割することもできます。

ファイル変換やバッチ処理を簡単にする machin

Machin は、ファイル変換やバッチ処理を簡単にする CLIツールです。フィルタ/マップ/リデュースから着想を得ています。

もうひとつの ls となる lsfp

プログラマ向けに特別に設計された、クロスプラットフォームな ls のシンプルな代替ツールです。

scp/ftp代替ツール termscp

termscp は、SCP/SFTP/FTP/S3 をサポートする、機能豊富なターミナルファイル転送およびエクスプローラです。リモートサーバに接続してファイルを取得したりアップロードしたり、ローカルのファイルシステムと対話するためのTUIを備えたターミナルユーティリティです。Linux、MacOS、FreeBSD、NetBSD、Windowsに対応しています。

rm 代替ツール rip-improved

rip-improved は、rm コマンドの改良版です。コマンド名は rip です。rip は削除されたファイルを temp ロケーションに送り、rip -u を使って復元することができます

cat 代替ツール bat

bat はシンタックスハイライトと Git の統合を備えた cat 代替ツールです。

高速に行を逆順で表示 tac

tac は Coreutils 由来の GNU tac ユーティリティを高速化し、 クロスプラットフォームに書き直したツールです。 tac はファイルや標準入力読み、行ごとに逆に出力します。

cutの代替ツール hck

hck は cut コマンドのほぼ完全な代替ツールです。cut と同じ列選択構文を使って出力列の順序を指定できるだけでなく、固定文字列の代わりに正規表現による区切り記号を使用することができます。

cut の代替ツール tuc

文字だけでなく、ネガティブインデックスを使用したり、選択したフィールドを好きなようにフォーマットしてカットすることができます。また、したい...。あるいは、最初と最後の行を削除するために、行単位で切り出すこともできます。

sort代替ツール sortpar

sortparは、テキストファイルを並列にソートすることができるコマンドラインツールです。

sort、uniq の代替ツール huniq

コマンドラインで与えられた入力から重複をフィルタリングするためのツールです。sort | uniq を高速に処理させるために最適化されています。(10倍高速)

uniq 代替ツール runiq

クレートライブラリ runiq-lib のCLIツール。ライブラリとしてプログラムからも呼び出すこともできます。runiq は、速度とメモリの両方に最適化されていて、テキスト入力から重複する項目(行)をフィルタリングする効率的な方法(処理時間とメモリ使用量の両方)を提供します。データや、速度とメモリ使用量の間のトレードオフに応じて、いくつかのフィルタリングオプションがサポートされています。

ファイル中の繰り返し行を削除する semiuniq

semiuniq は、GNU uniq のように、ファイル中の繰り返し行を削除するCLIツールです。uniq とは違い、出力行のグローバルな一意性は保証しませんが、代わりにソートする必要がありません。ログファイルなどで繰り返される行が多いときに便利になります。

テキスト式でフィルタリング/無視/置換など操作を行う ter

terは、テキスト式を実行し、コマンドライン上でフィルタリング、無視、置換などの基本的なテキスト操作を行うためのCLIツールです。このような仕事をする素晴らしいツールはたくさんあります。terはこの問題を解決するために、非常にシンプルなCLIと式言語を提供し、人間が理解しやすく、簡単に記憶することができ学習コストが低くなります。

条件によってテキストを追加する append-if

append-if は、ファイルの内容に関する簡単な条件論理に基づいて、ファイルにテキストを追加するためのCLIツールです。特に、誤って同じものを何度も追加することなく、.bashrc などにテキストを追加するのに便利です。

grep 代替ツール igrepper

テキストをフィルタリングし、即座にフィードバックして探索します。正規表現はキーを押すたびに再評価されます。また、正規表現をすばやく開発し、テストするのにも便利です。Linuxのみで動作します。

grep 代替ツール ripgrep

ripgrep はRustで実装された検索ツールで、正規表現パターンに基づいてカレントディレクトリ以下を再帰的に検索します。デフォルトでは、ripgrep は gitignore 規則をサポートし、隠しファイル/隠しディレクトリとバイナリファイルを自動的にスキップします。

ripgrep を補助する ripgrep-all

ripgrep-allはzip, tar.gz, pdf, sqlite3などもripgrepで検索できるツールです。コマンドは rga となります。

ripgrep の結果を対話型に置換する repgrep

repgrep は、検索と置換を簡単にするための対話的なCLIツールです。検索には ripgrep を使用し、リアルタイムで置換を確認したり、条件付きで一致するものを置換するためのシンプルなインターフェイスを提供します。コマンド名は rgr です。コマンド名は rg + replace に由来しています。

検索結果をハイライト表示する hgrep

hgrep は ripgrepでファイルを検索して、batで結果を表示したときのように、検索結果をハイライト表示します。grepコマンドの-Cオプションと同じように。hgrepは、マッチする行が近ければ、1つのコードスニペットに含まれる行を表示します。grep -Cとは異なり、hgrepは空白行に関するいくつかのヒューリスティックを採用して、効率的なコンテキスト行の数を決定します。

インデント構造のテキストを検索する ogrep

インデント構造のテキストファイルを検索するための機能的なCLIツールです。 ogrep は grepとよく似ていて、どちらもマッチした行を検索し、そのコンテキストを表示することができます。しかし、grep のコンテキストは「マッチした行の前後N行」ですが、ogrep のコンテキストは「マッチした行のインデントを辿った行」になります。

grepの検索結果の周囲を表示する suln

suln は、grepの検索結果の周囲を表示するためのCLIツールです。JSONデータをgrep で検索したときや、複数のgrepがパイプで接続されたようなときに欠損した情報を補完してくれるので便利です。

bc 代替ツール eva

bc コマンドに似たシンプルな電卓 REPLです。シンタックスハイライトと永続的な履歴を持っています。

tree 代替ツール tre-command

tre-command はtree をよりモダンにした代替ツールです。コマンド名は tre です。

tree の代替ツール rextc

tree と似てはいますが、rextc はファイル数および合計サイズを拡張子ごとに表示することができるシンプルなコマンドラインツールです。

パスのリストをパスのツリーとして表示 as-tree

as-tree は標準入力からパスのリストをうけとり、標準出力にツリーとして表示するツールです。

入力をツリー表示する treeify

treeify は、ファイルをリストアップするコマンドの出力を、コマンドツリーの出力と同様のツリー表現に変換します。

ls 代替ツール exa

exa は、ディレクトリの内容を一覧表示する ls をよりモダンにしたツールで、高速に動作します。また、tree表示をさせる事もできます。

ls 代替ツール lsd

lsd はカラフルでカスマイズ可能なカラーやアイコンを表示してくれます。

diffの代替ツール git-delta

git-deltaはdiff出力を見やすく表示してくれるツールです。コマンド名は delta になります。
diff の出力をパイプで受けて処理したり、直接2つのファイルの比較もできます。

diff の結果を強調表示する riffdiff

riffdiff は、diff の結果からどこが違っているのかを強調表示するCLIツールです。ディレクトリ単位で比較したり、git と連携することもできます。コマンド名は riff です。

構文に基づいてファイルを比較する difftastic

difftasticは、30以上のプログラミング言語の構文に基づいてファイルを比較する構造差分ツールです。 コマンド名は difft です。

xargs と awk を合わせたような rargs

Rargs は xargs にパターンマッチをサポートした awk のようなものです。

find 代替ツール fd-find

fd-find は、ファイル階層をたどるための find の高速でユーザフレンドリな代替ツールです。コマンド名は fd です。

SQLのようにファイル検索を行う fselect

fselect は find や ls を完全に置き換えるようなツールではりませんが、SQLのようにファイル検索を行うことができ、出力フォーマットを指定できるツールです。

sed 代替ツール sd

sd は直感的な検索・置換コマンドラインツールで、テキストを解析・変換するsed コマンドの代替ツールです。
sd は単純な構文で出現箇所すべてを置き換えることができます。sed の正規表現構文は特殊ですが、sd は JavaScript や Python で使用される正規表現構文を使用することができ、sed での正規表現のクセを気にする必要がありません。sed と比較して2倍以上高速に処理することができます。

sed のサブセット rsed

GNU sed のサブセットをRustで実装したCLIツールです。

awk 代替ツール frawk

frawk は、AWK言語によく似た、テキストデータを処理する短いプログラムを書くための小さなプログラミング言語です。多くの一般的なAWKプログラムは、frawk で処理することができます。

date 代替ツール dtg

dtg は、date の代替となるCLIツールです。ライブラリとしてプログラムから使用することもできます。

UNIXタイムスタンプを扱う ut-cli

UNIXタイムスタンプを扱うコマンドラインツールです。コマンド名は ut です。

タイムスタンプと日時文字列の変換 timey

タイムスタンプとフォーマットを指定された日付時刻の間の変換を迅速かつ容易に行うことができる、小さなCLIツールです。

Base64のCLIツール base64-cli

base64文字列をエンコーディング/ディコードするツールです。ネイティブと WebAssembly の両方をサポートします。

Base64(パディング付き)のCLIツール base64-lt

base64 (パディング付き) 文字列をエンコーディング/ディコードするCLIツールです。

parallel 代替ツール async-cmd

async はシェルコマンドを並列に実行するためのツールです。コマンド名は async です。 最小限の変更でシェルスクリプトを素早く並列化できるように設計されています。GNU Parallel に触発されたものですが、主な違いは async がバックグラウンドでサーバを実行することにより、コマンド間の状態を保持する点です。

コマンドを非同期並列で実行する rust-parallel

コマンドを並列に実行し、その出力を集計するコマンドラインユーティリティです。
GNU Parallel や xargs に似たインタフェースです、
xargs の -n1 や -L1 オプションと同様に、各入力行に対して常に 1 プロセスを実行します。
Rust と tokio で実装されていて、非同期で処理されるため、非常に高速です。

コマンドを並列に実行する parallel-sh

parallel-shは、「並列処理でないはずのコマンドラインタスク」を並列化するRust Parallelに大きくインスパイアされてたCLIツールです。しかし、parallel-sh は GNU Parallel の全機能を再現しようとするのではなく、単にプラットフォームのシェル(Unixシステムでは ”sh -c”、Windowsでは”powershell.exe -c”)で(コマンドの)行を別々のスレッドで実行します。

標準入力をコマンドラインの引数にマップする lnx

lnx は、標準入力から読み込んだ行を実行するコマンドへ変数としてマッピングして、コマンドラインを作成し実行するシンプルなCLIツールです。xargs のサブセットのようなものですが、単純でわかりやすいツールです。 コマンド名 lnx は LiNe eXec に由来しています。

anacron の代用ツール bgproc

バックグラウンドでタスクを実行するためのbashスクリプトです。evry と連携して使用します。

シェルベースのタスクスタジューラー evry

シェルスクリプト中心のタスクスケジューラ。制御フローを決定するために終了コードを使用します。 bgproc と連携して使用します。

別プログラムの画面をフリーズする nora

別プログラムの画面をフリーズさせるCLIツールです。画面をフリーズさせた後、プログラムを実行し、再び画面をフリーズさせないようにします。主な目的は、画面が更新されたときのスクリーンショットツールの動作を変更することです。

高速で高信頼性のローカルファイル同期ツール lms

rsync に代わる高速で信頼性の高いローカルファイル同期ツールです。

高速に圧縮・解凍できる crabz

クロスプラットフォームで、高速に圧縮・解凍できるツールです。

万能な圧縮/解凍ツール ouch

ouch は、複数の対応フォーマットに対応した圧縮/解凍を行うCLIツールです。対応フォーマットは、tar, zip, bz/bz2, gz, lz4, xz/lz/lzma, zst です。ファイルの拡張子から圧縮フォーマットを推定して処理してくれます。サポートしている拡張子は、.tar , .tgz , .tbz , .tbz2 , .tlz4 , .txz , .tlzma , .tsz , .tzst , .zip , .gz , .xz , .lzma , .bz , .bz2 , .lz4 , .sz , .zst です。

ファイルのハッシュ値を取得する filehasher

filehasher は、指定したファイルのハッシュダイジェストを取得するCLIツールです。サポートしているハッシュアルゴリズムは md5 , SHA128 , SHA224 , SHA256 , SHA384 , SHA512 です。

端末からbing検索を行う xman

xman は、Bing検索エンジンの検索結果を端末に表示するCLIツールです。


この記事が気に入ったらサポートをしてみませんか?