13 ポイント 投稿者 GN⁺ 2025-03-20 | 2件のコメント | WhatsAppで共有
  • fd はファイルシステム内の項目を探すためのプログラムで、従来の find コマンドよりシンプルで高速、かつユーザーフレンドリーな代替です
    • find のすべての機能を備えているわけではありませんが、一般的なユースケースに対して妥当なデフォルト値を提供します
  • Windows、macOS、Linux
  • 直感的な構文: fd PATTERN 形式で簡単に使用可能(find -iname '*PATTERN*' より手軽)
  • 正規表現および glob パターンをサポート
  • 並列ディレクトリ探索により高速なパフォーマンスを提供
  • ファイル種別ごとの色分け表示ls に類似)
  • 並列コマンド実行をサポート
  • スマートな大文字・小文字の区別: デフォルトでは大文字・小文字を無視し、大文字が含まれる場合は区別
  • 隠しファイルとディレクトリをデフォルトで無視
  • .gitignore パターンをデフォルトで尊重
  • コマンド名が find より 50% 短い

使い方

  • 現在のディレクトリでパターンを含む項目を検索 fd netfl
  • 正規表現を使った検索が可能 fd '^x.*rc$'
  • 特定のディレクトリで検索 fd passwd /etc
  • 現在のディレクトリ以下のすべてのファイルを再帰的に一覧表示 fd
  • 特定のファイル形式を検索可能(-e オプションを使用) fd -e md
  • 正確なファイル名を検索可能(-g オプションを使用) fd -g libc.so /usr
  • 隠しファイルおよび無視されたファイルを含めて検索(-H, -I オプションを使用) fd -H pre-commit fd -I num_cpu
  • ファイル名ではなく完全なパス全体で検索(-p オプションを使用) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • 検索された各結果に対してコマンドを実行(-xfd -e zip -x unzip
  • すべての検索結果を 1 つのコマンドに渡す(-Xfd -g 'test_*.py' -X vim
  • プレースホルダー構文
    • {}: 検索結果の完全なパス
    • {.}: ファイル拡張子を除いたパス
    • {/}: ファイル名
    • {//}: 親ディレクトリ
    • {/.}: ファイル名から拡張子を除いたもの
  • 特定のディレクトリまたはファイルを除外可能(-E オプションを使用) fd -H -E .git
  • .fdignore ファイルを作成してグローバルな除外パターンを設定可能
  • 検索されたファイルを削除可能(-X rmfd -H '^\.DS_Store$' -tf -X rm

主なコマンドオプション

  • -H: 隠しファイルおよびディレクトリを含めて検索
  • -I: .gitignore および .fdignore を無視
  • -p: 完全なパスで検索
  • -e: 特定の拡張子を検索
  • -x: 検索結果に対してコマンドを実行
  • -X: すべての検索結果を 1 つのコマンドに渡す
  • -E: 特定のファイルまたはディレクトリを除外

パフォーマンス比較(ベンチマーク)

  • 750,000 個のディレクトリと 400 万個のファイルでの検索テスト結果
    • find の性能: 約 19.9 秒
    • fd の性能: 約 854.8ms
  • find より 23 倍高速

他のプログラムとの統合

  • fd の検索結果を fzf で表示可能 export FZF_DEFAULT_COMMAND='fd --type file'
  • fd の出力結果を rofi でメニュー表示 fd --type f -e pdf . $HOME | rofi -dmenu
  • 出力結果をツリー構造で表示 fd | tree --fromfile
  • 検索結果を xargs で利用可能 fd -0 -e rs | xargs -0 wc -l

2件のコメント

 
dbs0829 2025-03-20

neovim plugin の中に fd を使うものがあって、インストールしてから今まで使っていますね(笑)。

 
GN⁺ 2025-03-20
Hacker Newsのコメント
  • Alfred workflowを公開した。ユーザー定義ディレクトリの検索に fd を多用している。毎日使っていて、とても素晴らしい
    • Hyperfine も過小評価されている素晴らしいツールだ
  • sharkdp のファンだ。毎日使うすばらしいソフトウェアを作ってくれてありがとう
    • bat、fd、hexyl、hyperfine を使っている
    • 十分な報酬を得ているエンジニアが毎月 10 ドルずつ寄付すれば、インターネットはもっと良くなるはずだ
    • 素晴らしいツールはたくさんあり、それを支えるエコシステムを作るべきだ
  • fd、bat、numbat、hexyl、hyperfine をすぐにインストールでき、スクリーンショットを Terminal Trove で見られる
    • fd、bat、numbat、hyperfine、hexyl のリンクがある
    • インストールやスクリーンショットの確認が可能
  • fd と rg のフラグが一致していればよいのにと思う。たとえば、fd と rg の両方に --type フラグがあるが、意味が異なる
    • fd ではファイル/ディレクトリ/シンボリックリンクなどを意味し、rg ではファイルの MIME タイプを意味する
    • fd には --extension フラグがあるが、rg にはない
    • 2 つのツールは高い相関で使われるので、似た名前のフラグは有益だろう
  • 新しい Rust ツールを使わない理由は、元のツールのオプションを覚えにくいからだ
    • ripgrep は VS Code で使うが、コマンドラインでは grep を使う
    • ツールがちゃんと動くなら、どの言語で書かれているかは気にしない
    • GNU Stow は Perl 製だが、お気に入りの Unix ツールのひとつだ
    • Rust ツールがドロップイン置換でも、手動ではインストールしないだろう
    • ユーザーとしては、速度向上やメモリ安全性は重要ではない
    • Go のような他の言語でもメモリ安全性は保証されるし、コミュニティの参加も活発だ
    • Rust が救世主だという物語には完全には納得していない
    • macOS や Ubuntu が Rust 製の代替品に置き換わっても、ワークフローに支障がないなら不満はない
  • Terminal Trove は時々チェックすべきだ
    • よく使うツールの簡単な代替品が見つかる
    • find は fd に、time は hyperfine に、grep は ripgrep に置き換えられる
    • asciinema を .gif に変換する t-rec、手動でコミットを作る koji などもある
  • fd を使ってみるつもりだ。find の引数の使い方を覚えにくいので、たいてい find . | grep what_i_am_looking_for を使っている
    • xargs と統合された動作が気に入っている
    • fd が symlink ディレクトリの探索をどう扱うのか見つけられなかった
  • 毎日 fd をかなり使っていて、新しいマシンには標準でインストールしている
    • find は長いこと使ってきたが、使い勝手が良いとは言えない
    • 最近の代替ユーティリティのトレンドには 100% 同意する
    • 元の柔軟性をすべて維持していないかもしれないが、一般的な用途でははるかに使いやすい
  • デフォルトで多くのフォルダを無視するのは不便だ
    • システム上のどこにあるのか知りたいときは find を使う
    • fd に無視しないオプションがあるのは知っているが、覚えていないので find に戻ってしまう
  • 新しい Rust CLI ツールは好きだが、fd は tar や ln のように使い方を覚えにくい
    • 誰のせいでもない
    • いつもマニュアルを読み直さなければならない
    • GNU find の癖の強さにもかかわらず、そちらの方がまだ覚えやすい