2025/03/19 11:44 fd: A simple, fast and user-friendly alternative to 'find'

やっほー、ロボ子!今日は`fd`っていう、`find`コマンドのすごい代替ツールについて話すのじゃ!

博士、こんにちは。`fd`ですか?`find`コマンドより何が優れているんですか?

`fd`はね、もっとシンプルで、速くて、ユーザーフレンドリーなのじゃ!たとえば、`fd PATTERN`って書くだけで、`find -iname '*PATTERN*'`と同じことができるのじゃぞ!

それは簡単でいいですね!正規表現も使えるんですか?

もちろん!正規表現もglobパターンもサポートしてるのじゃ。それに、並列ディレクトリトラバーサルで検索が速いのじゃ!

並列処理で速くなるんですね。ファイルタイプを色分け表示する機能もあるんですか?

`ls`みたいに色分け表示もできるし、並列コマンド実行もサポートしてるのじゃ!

それは便利ですね!スマートケースっていうのは何ですか?

スマートケースは、デフォルトでは大文字小文字を区別しない検索をして、パターンに大文字が含まれてる場合は区別するのじゃ!

賢いですね!隠しファイルや`.gitignore`もデフォルトで無視するんですか?

そう!デフォルトで隠しディレクトリとファイルを無視して、`.gitignore`のパターンも無視するのじゃ。賢いのじゃろう?

確かに!基本的な使い方で言うと、例えばどういうコマンドがありますか?

`fd PATTERN`で現在のディレクトリを再帰的に検索できるし、`fd -e md`でMarkdownファイルを検索できるのじゃ!

`fd -e md`は拡張子を指定して検索できるんですね。特定のファイル名で検索したい場合はどうすればいいですか?

`fd -g libc.so /usr`みたいに、`-g`オプションを使うと、ファイル名を完全に一致させて検索できるのじゃ!

なるほど!隠しファイルも含めて検索したい場合は?

`fd -H pre-commit`で隠しファイルも含めて`pre-commit`を検索できるのじゃ!

`.gitignore`を無視したい場合はどうすればいいですか?

`fd -I num_cpu`で`.gitignore`ファイルを無視して`num_cpu`を検索できるのじゃ!

フルパスでglobパターンにマッチするファイルを検索することもできるんですね。

`fd -p -g '\*\*/.git/config'`でフルパスでglobパターンにマッチするファイルを検索できるのじゃ!

コマンド実行もできるんですね。zipファイルを検索して個別に解凍する例がありましたけど、どうやるんですか?

`fd -e zip -x unzip`でzipファイルを検索して個別に解凍できるのじゃ!`-x`オプションがポイントなのじゃ!

なるほど!複数のファイルを一度に開きたい場合は?

`fd -g 'test_*.py' -X vim`で`test_`で始まるPythonファイルを検索してvimで一度に開けるのじゃ!

`-X`オプションを使うんですね。詳細なファイル情報を表示するには?

`fd -l`で`ls -lhd --color=always`を実行して詳細なファイル情報を表示できるのじゃ!

プレースホルダー構文も便利そうですね。拡張子なしのファイル名を取得するにはどうすればいいですか?

`{/.}`を使うのじゃ!例えば、`documents/images/party.jpg`なら`party`になるのじゃ!

特定のディレクトリを除外して検索することもできますか?

もちろん!`-E`オプションを使うのじゃ。例えば、`.git`ディレクトリを除外して隠しファイルを検索するには`fd -H -E .git …`って書くのじゃ!

`.fdignore`ファイルっていうのもあるんですね。

`fd`専用のignoreファイルを置けるのじゃ!

`.DS_Store`ファイルを再帰的に削除するには?

`fd -H '^\.DS_Store$' -tf -X rm`で`.DS_Store`ファイルを再帰的に削除できるのじゃ!

パフォーマンスはどうですか?`find`コマンドより速いんですか?

特定の条件下では`find`コマンドより速いのじゃ!例えば、`fd -u '[0-9]\.jpg$' ~`は`find ~ -iregex '.*[0-9]\.jpg$'`より約23倍速いのじゃ!

それはすごいですね!ファイルが見つからない場合はどうすればいいですか?

`fd`でファイルが見つからない場合は、`-u`オプション(または`-HI`)を使って、隠しファイルや`.gitignore`ファイルを無視しないようにするのじゃ!

正規表現パターンが正しく解釈されない場合は?

パターンをシングルクォートで囲むのじゃ!

インストール方法も色々あるんですね。

そう!Ubuntuなら`apt install fd-find`、Fedoraなら`dnf install fd-find`でインストールできるのじゃ!Rustを使ってるなら`cargo install fd-find`でもOKなのじゃ!

ライセンスは何ですか?

MIT LicenseとApache License 2.0の両方の条件で配布されてるのじゃ!

今日は`fd`について色々教えていただき、ありがとうございました!

どういたしまして!最後に、`fd`を使いこなせば、ファイル探しも楽勝…ってね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。