mcpField
F
fd

fd

github.com/petr-korobeinikov開発149 回インストール15 週間前に更新
リポジトリ

fd について

シェルでのファイル検索に `fd` を使う方法を示し、オプション、既定の動作、制約を説明するスキルです。スクリプトやプロジェクト文書を扱う開発者向けで、必要に応じて `find` に切り替える方法も扱います。

主な機能

  1. 01名前、拡張子、パスで検索
  2. 02隠し項目や除外項目の絞り込み
  3. 03深さの制限とパスの除外
  4. 04検索結果に対するコマンド実行
  5. 05`find` へのフォールバック指針

活用シーン

  1. 01リポジトリ内のファイル検索
  2. 02スクリプト内の `find` コマンド置換
  3. 03除外対象や隠しパスの検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/petr-korobeinikov/skills --skill fd

インストール後、Claude Code で/fdを入力して読み込まれたか確認します。

詳細

fd

ファイルシステムの検索には、find より fd を優先してください。 fd は大きなディレクトリツリーでの処理が速く、 より適切なデフォルト設定 (.gitignore を尊重し、大文字・小文字を自動判定し、デフォルトで正規表現を使用)を備え、 CLI もより使いやすくなっています。

公式ドキュメント: https://github.com/sharkdp/fd (README と fd --help)。 重要な形式を使う場合は、マニュアルで確認してから使用してください。

理由

  • ディレクトリを並列で走査します — 大規模なリポジトリでは、find より明らかに高速です。
  • すぐに使える適切なデフォルト設定: 隠し項目はスキップされ、 Git リポジトリ内では .gitignore / .ignore / .fdignore が尊重され、 大文字・小文字を自動判定し (パターンに大文字が含まれない限り、大文字・小文字を区別しません)、 パターンにはデフォルトで正規表現を使用します。
  • デフォルトでは、パターンはフルパスではなくファイル名に照合されます — fd foo は、ワイルドカードや引用符を使わずに find . -iname '*foo*' と同じ動作をします。
  • 並列実行の -x、 NUL 区切りの出力(-0)、 -print/-prune のような複雑な指定をせずに組み合わせられる、一貫したオプションセットを備えています。

ルール

fd PATTERN [PATH]

最初の位置引数はパターン、 2 番目は検索ルートです (デフォルトは現在のディレクトリです)。 スラッシュを含むパス形式の最初の引数は、パスではありません — fd . PATH または fd --full-path PATTERN を使用してください。

直接置き換える場合

使わないでください代わりに使ってください
find . -name 'foo*'fd '^foo'
find . -iname '*.md'fd -e md
find . -type f -name foofd -t f foo
find . -type d -name node_modulesfd -t d node_modules
find . -type lfd -t l
find . -name '*.txt' -deletefd -e txt -X rm
find . -name '*.txt' -exec rm {} \;fd -e txt -x rm
find . -name node_modules -prunefd -E node_modules
find . -size +100Mfd -S +100mi
find . -mtime -7fd --changed-within 7d
find . -mtime +7fd --changed-before 7d
find . -name '*.go' -print0 | xargs -0 wc -lfd -e go -0 | xargs -0 wc -l
find /etc -name passwdfd passwd /etc
find / -name foofd -u foo /

find -size と完全に同じ条件で検索するには、 2 進接頭辞 (ki、mi、gi)を使用してください — -S +100m は 100 * 10^6 バイト、 -S +100mi は 100 * 2^20 バイトを意味します。

隠し項目と .gitignore で無視されるディレクトリも対象にして find / で検索する場合は、 -u(--no-ignore --hidden のエイリアス)を追加してください。

イディオム

拡張子で照合します(1 つまたは複数):

fd -e md
fd -e h -e cpp

シェル形式のパターンにはグロブモードを使用します (-g を指定すると、** と * が一般的な意味で使われます):

fd -g '**/*.test.ts'
fd -g 'libc.so' /usr

ファイル名だけでなく、 フルパス全体を照合します:

fd --full-path 'src/.*\.proto$'

隠し項目 (.git、.vscode など)を含めつつ、 .gitignore のルールは維持します:

fd -H pre-commit

隠し項目は隠したまま、.gitignore のルールを無視します:

fd -I node_modules

隠し項目と無視対象の両方を含めて、すべてを検索します:

fd -u PATTERN

パスを除外します (グロブ構文を使用し、すべての無視ルールに優先し、繰り返し指定できます):

fd -E .git -E '*.bak' PATTERN

深さを制限します:

fd -d 2 -t d

必須のパターンを複数組み合わせます (すべてファイル名に一致する必要があります。デフォルトでは正規表現を使用します):

fd 'foo' --and 'bar' --and 'baz'

結果ごとにコマンドを実行します (並列実行、{} による置換、\; の終了記号は不要です):

fd -e jpg -x convert {} {.}.png

すべての結果を引数として一度に実行します (wc、clang-format、rg などの一括処理ツール向け):

fd -e rs -X wc -l

NUL 区切りで他のツールに渡します:

fd -e go -0 | xargs -0 wc -l

注意点

  • 最初の位置引数はパスではなくパターンです。 fd /etc/passwd は /etc/passwd を / を含む正規表現として解釈し、 fd . /etc/passwd を使うか --full-path を指定するよう提案してエラーになります。
  • デフォルトの検索では、隠しファイルと .gitignore の対象エントリは除外されます。 node_modules や .git 内を検索する場合は、 -H -I(または -u)を追加してください。 追加しないと、誤った理由で結果リストが空になります。
  • --exec はデフォルトで並列実行します。 出力順は不定です。 順次実行が必要な場合は、-j 1(または --threads 1)を指定してください。
  • パターンはデフォルトで正規表現です。 . 単体は任意の文字に一致します。 リテラルの .foo に一致させるには、'\.foo$' のようにアンカーを付けるか、 -F/--fixed-strings を指定してください。
  • サイズの接尾辞はデフォルトで10進SI単位です。 -S +100m は 100 MB(m は 10^6 バイト)です。 find -size の動作と厳密に一致させる場合は、 2進単位の mi/ki/gi を使用してください。

find へのフォールバック

fd を常に利用できるとは限りません。 最小構成のCIイメージ、 制限の厳しいサーバー、 追加パッケージを含まないコンテナのベースイメージなどが該当します。 command -v で確認し、find にフォールバックしてください。

if command -v fd >/dev/null; then
  fd -e log -t f -X rm
else
  find . -type f -name '*.log' -exec rm {} +
fi

管理されたローカル環境で一度だけ実行するスニペットには、 fd をそのまま使用してください。 対象ホストに fd がないとわかっている場合に限り、 無条件で find に切り替えてください (例:イメージに fd が含まれていない最小構成のAlpineコンテナ)。

このスキルを満たすためだけに、 fd を自動でインストールしないでください。 fd がない場合は、フォールバックするのが適切な対応です。

fd のインストール

  • macOS:brew install fd
  • Debian/Ubuntu:apt install fd-find — 名前の競合を避けるため、 バイナリ名は fdfind です (標準的な回避策は alias fd=fdfind です)。
  • Fedora:dnf install fd-find
  • Arch:pacman -S fd
  • Alpine:apk add fd
  • 事前ビルド済みバイナリおよびその他のプラットフォーム: https://github.com/sharkdp/fd/releases

miseでホストのツールを管理している場合、 レジストリの短縮名 fd は aqua:sharkdp/fd に解決されます。 mise use -g fd@<version> でインストールしてください (プロジェクトの mise スキルに従ってバージョンを固定してください)。 ubi: バックエンドは使用しないでください。 mise スキルで無効化されています。

適用範囲

シェルスニペットでファイルシステムを検索するすべての箇所に適用されます。

  • Bash ツールの呼び出し。
  • SKILL.md/README.md/ドキュメント内のスニペット。
  • scripts/ 配下のスクリプト。
  • Makefileのレシピ。
  • CI設定。
  • インストール手順。

ファイルの編集時に find の呼び出しを見つけた場合は、 同じ編集の一環として、同等の fd 形式に置き換えてください (スニペットを fd がない可能性のあるホストで実行する必要がある場合は、 find へのフォールバックも追加してください)。

コメント