fd について
find コマンドの現代的な代替品で、よりシンプルな構文と高速パフォーマンスを提供します。正規表現やファイルタイプフィルタリングに対応し、シェルパイプラインとシームレスに統合します。
主な機能
- 01ファイル名で高速検索
- 02ファイル拡張子で精密なフィルタリング
- 03正規表現とパターンマッチングをサポート
- 04パイプと他のシェルツールとシームレス統合
活用シーン
- 01大規模コードベースで特定ファイルタイプを素早く検索
- 02複雑なファイル検索ワークフロー構築
- 03コマンドラインスクリプトのパフォーマンス向上
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にfd --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
fd
fd はファイルシステム内のエントリを検索するプログラムです。
find のシンプルで高速かつ使いやすい代替です。
find の強力な機能をすべてサポートすることを目指しているわけではありませんが、多くのユースケースに対して
(意見の強い)妥当なデフォルトを提供します。
インストール • 使い方 • トラブルシューティング
特徴
- 直感的な構文:
find -iname '*PATTERN*'の代わりにfd PATTERN。 - 正規表現(デフォルト)と glob ベースのパターン。
- ディレクトリ走査が並列化されるため非常に高速です。
- 異なるファイル種別をハイライトするために色を使用します(
lsと同じ)。 - 並列コマンド実行をサポートします。
- スマートケース:検索はデフォルトで大文字小文字を区別しません。パターンに大文字が含まれる場合は 大文字小文字を区別するように切り替わります*。
- デフォルトで隠しディレクトリとファイルを無視します。
- デフォルトで
.gitignoreのパターンを無視します。 - コマンド名は
findより 50% 短いです* :-)。
デモ
使い方
まず、利用可能なすべてのコマンドラインオプションの概要を把握するには、簡潔なヘルプメッセージを表示する
fd -h を実行するか、より詳細なバージョンを表示する fd --help を実行します。
単純な検索
fd はファイルシステム内のエントリを検索するように設計されています。最も基本的な検索は、fd を
単一の引数(検索パターン)で実行することです。たとえば、自分の古いスクリプト(名前に netflix が含まれるもの)
を探したいとします:
> fd netfl
Software/python/imdb-ratings/netflix-details.py
このように単一の引数だけで呼び出した場合、fd は現在のディレクトリを再帰的に検索し、パターン netfl を
含む すべてのエントリを探します。
正規表現検索
検索パターンは正規表現として扱われます。ここでは、x で始まり rc で終わるエントリを検索します:
> cd /etc
> fd '^x.*rc$'
X11/xinit/xinitrc
X11/xinit/xserverrc
fd で使用される正規表現の構文はここに記載されています。
ルートディレクトリの指定
特定のディレクトリを検索したい場合は、fd の 2 番目の引数として指定できます:
> fd passwd /etc
/etc/default/passwd
/etc/pam.d/passwd
/etc/passwd
すべてのファイルを再帰的に一覧表示
fd は引数なしで呼び出すことができます。これは現在のディレクトリ内のすべてのエントリを再帰的に
すばやく把握するのに非常に便利です(ls -R と同様):
> cd fd/tests
> fd
testenv
testenv/mod.rs
tests.rs
この機能を使って特定のディレクトリ内のすべてのファイルを一覧表示したい場合は、. や ^ のような
すべてにマッチするパターンを使用する必要があります:
> fd . fd/tests/
testenv
testenv/mod.rs
tests.rs
特定のファイル拡張子の検索
多くの場合、特定の種類のファイルすべてに関心があります。これは -e(または --extension)オプションで
行えます。ここでは、fd リポジトリ内のすべての Markdown ファイルを検索します:
> cd fd
> fd -e md
CONTRIBUTING.md
README.md
-e オプションは検索パターンと組み合わせて使用できます:
> fd -e rs mod
src/fshelper/mod.rs
src/lscolors/mod.rs
tests/testenv/mod.rs
特定のファイル名の検索
指定した検索パターンに完全に一致するファイルを探すには、-g(または --glob)オプションを使用します:
> fd -g libc.so /usr
/usr/lib32/libc.so
/usr/lib/libc.so
隠しファイルと無視されたファイル
デフォルトでは、fd は隠しディレクトリを検索せず、検索結果に隠しファイルを表示しません。
この動作を無効にするには、-H(または --hidden)オプションを使用します:
> fd pre-commit
> fd -H pre-commit
.git/hooks/pre-commit.sample
Git リポジトリ(または Git リポジトリを含む)であるディレクトリで作業している場合、fd は
.gitignore パターンのいずれかに一致するフォルダを検索せず(ファイルも表示しません)。この動作を
無効にするには、-I(または --no-ignore)オプションを使用します:
> fd num_cpu
> fd -I num_cpu
target/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib
すべてのファイルとディレクトリを本当に検索するには、隠しファイルと無視の機能を組み合わせて
すべてを表示する(-HI)か、-u/--unrestricted を使用するだけです。
フルパスのマッチング
デフォルトでは、fd は各ファイルのファイル名のみをマッチングします。しかし、--full-path または -p オプションを使用すると、
フルパスに対してマッチングできます。
> fd -u -p -g '**/.git/config'
> fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
コマンド実行
検索結果を表示するだけでなく、それらを使って何かをすることがよくあります。fd
では、各検索結果に対して外部コマンドを実行する 2 つの方法を提供します。
-x/--execオプションは、各検索結果に対して外部コマンドを実行します(並列)。-X/--exec-batchオプションは、すべての検索結果を引数として、外部コマンドを一度だけ起動します。
例
すべての zip アーカイブを再帰的に検索し、展開します:
fd -e zip -x unzip
file1.zip と backup/file2.zip の 2 つのファイルがある場合、これは
unzip file1.zip と unzip backup/file2.zip を実行します。2 つの unzip プロセスは並列で実行されます
(ファイルが十分に速く見つかった場合)。
すべての *.h と *.cpp ファイルを検索し、clang-format -i でその場で自動フォーマットします:
fd -e h -e cpp -x clang-format -i
clang-format の -i オプションを個別の引数として渡せることに注目してください。これが、
-x オプションを最後に置く理由です。
-x の後にある位置引数はすべてコマンドテンプレートに属し、fd 自体には属しません。パターンや検索パスも
渡したい場合は、-x を最後に置いてください:
fd pattern path -x echo
すべての test_*.py ファイルを検索し、お気に入りのエディタで開きます:
fd -g 'test_*.py' -X vim
ここでは大文字の -X を使用して、単一の vim インスタンスを開くことに注意してください。test_basic.py と
lib/test_advanced.py の 2 つのファイルがある場合、これは vim test_basic.py lib/test_advanced.py を実行します。
ファイルのパーミッション、所有者、ファイルサイズなどの詳細を確認するには、各結果に対して ls を実行するよう
fd に指示できます:
fd … -X ls -lhd --color=always
このパターンは非常に便利なので、fd にはショートカットが用意されています。-l/--list-details
オプションを使用すると、この方法で ls を実行できます: fd … -l。
-X オプションは、fd と ripgrep(rg)を組み合わせて、すべての C++ ソースファイルなど、特定のクラスのファイル内を検索する場合にも便利です:
fd -e cpp -e cxx -e h -e hpp -X rg 'std::cout'
すべての *.jpg ファイルを *.png ファイルに変換します:
fd -e jpg -x convert {} {.}.png
ここで、{} は検索結果のプレースホルダーです。{.} は同じですが、ファイル拡張子がありません。
プレースホルダー構文の詳細については、以下を参照してください。
-x を使用して並列スレッドから実行されたコマンドのターミナル出力は、インターリーブされたり文字化けしたりしないため、
fd -x を使用して、多数のファイルに対して実行されるタスクを初歩的に並列化できます。
その例として、ディレクトリ内の各ファイルのチェックサムを計算することが挙げられます。
fd -tf -x md5sum > file_checksums.txt
プレースホルダー構文
-x オプションと -X オプションは、コマンドテンプレートを一連の引数として受け取ります(単一の文字列ではなく)。
コマンドテンプレートの後に fd に追加のオプションを加えたい場合は、\; で終了できます。
たとえば、fd -x echo \; pattern path は pattern path を echo に渡すのではなく、
fd の引数として扱います。実際には、fd pattern path -x echo と書く方がしばしば明確です。
コマンドを生成する構文は、GNU Parallel のものと似ています:
{}: 検索結果のパスに置き換えられるプレースホルダートークン (documents/images/party.jpg)。{.}:{}と同様ですが、ファイル拡張子がありません(documents/images/party)。{/}: 検索結果のベース名に置き換えられるプレースホルダー(party.jpg)。{//}: 検出されたパスの親(documents/images)。{/.}: 拡張子を除いたベース名(party)。
プレースホルダーを含めない場合、fd は自動的に末尾に {} を追加します。
並列実行と直列実行
-x/--exec では、-j/--threads オプションを使用して並列ジョブの数を制御できます。
直列実行には --threads=1 を使用します。
特定のファイルやディレクトリを除外する
特定のサブディレクトリからの検索結果を無視したい場合があります。たとえば、すべての隠しファイルとディレクトリ (-H) を検索しつつ、.git ディレクトリからの一致をすべて除外したい場合があります。これには -E (または --exclude) オプションを使用できます。任意の glob パターンを引数として受け取ります:
> fd -H -E .git …
また、これを使ってマウントされたディレクトリをスキップすることもできます:
> fd -E /mnt/external-drive …
.. または特定のファイルタイプをスキップすることもできます:
> fd -E '*.bak' …
このような除外パターンを永続的にするには、.fdignore ファイルを作成します。これは .gitignore ファイルと同様に機能しますが、fd に固有のものです。たとえば:
> cat ~/.fdignore
/mnt/external-drive
*.bak
メモ
fdは、rgやagなどの他のプログラムで使用される.ignoreファイルもサポートしています。
これらのパターンを fd でグローバルに無視したい場合は、fd のグローバル ignore ファイルに記述できます。これは通常、macOS や Linux では ~/.config/fd/ignore に、Windows では %APPDATA%\fd\ignore にあります。
--hidden オプションを使用する場合に .git ディレクトリとその内容が出力に含まれないように、fd/ignore ファイルに .git/ を含めたい場合があるかもしれません。
ファイルの削除
fd を使用して、検索パターンに一致するすべてのファイルとディレクトリを削除できます。ファイルのみを削除したい場合は、--exec-batch/-X オプションを使って rm を呼び出せます。たとえば、すべての .DS_Store ファイルを再帰的に削除するには、次のように実行します:
> fd -H '^\.DS_Store$' -tf -X rm
不明な場合は、常に最初に -X rm を付けずに fd を呼び出してください。あるいは、rm の「対話的」オプションを使用します:
> fd -H '^\.DS_Store$' -tf -X rm -i
特定の種類のディレクトリも削除したい場合は、同じ手法を使用できます。ディレクトリを削除するには、rm の --recursive/-r フラグを使用する必要があります。
メモ
fd … -X rm -rの使用が競合状態を引き起こすシナリオがあります:…/foo/bar/foo/…のようなパスがあり、fooという名前のすべてのディレクトリを削除したい場合、外側のfooディレクトリが最初に削除され、rm呼び出しで (無害な) "'foo/bar/foo': No such file or directory" エラーが発生する状況になる可能性があります。
コマンドラインオプション
これは fd -h の出力です。コマンドラインオプションの完全なセットを表示するには、fd --help を使用します。こちらにはより詳細なヘルプテキストも含まれています。
Usage: fd [OPTIONS] [pattern [path]...]
Arguments:
[pattern] the search pattern (a regular expression, unless '--glob' is used; optional)
[path]... the root directories for the filesystem search (optional)
Options:
-H, --hidden Search hidden files and directories
-I, --no-ignore Do not respect .(git|fd)ignore files
-s, --case-sensitive Case-sensitive search (default: smart case)
-i, --ignore-case Case-insensitive search (default: smart case)
-g, --glob Glob-based search (default: regular expression)
-a, --absolute-path Show absolute instead of relative paths
-l, --list-details Use a long listing format with file metadata
-L, --follow Follow symbolic links
-p, --full-path Search full abs. path (default: filename only)
-d, --max-depth <depth> Set maximum search depth (default: none)
-E, --exclude <glob> Exclude entries that match the given glob pattern
-t, --type <filetype> Filter by type: file (f), directory (d/dir), symlink (l),
executable (x), empty (e), socket (s), pipe (p), char-device
(c), block-device (b)
-e, --extension <ext> Filter by extension
-S, --size <size> Limit results based on the size of files
--changed-within <date|dur> Filter by file modification time (newer than)
--changed-before <date|dur> Filter by file modification time (older than)
-o, --owner <user:group> Filter by owning user and/or group
--format <fmt> Print results according to template
-x, --exec <cmd>... Execute a command for each search result
-X, --exec-batch <cmd>... Execute a command with all search results at once
-c, --color <when> When to use colors [default: auto] [possible values: auto,
always, never]
--hyperlink[=<when>] Add hyperlinks to output paths [default: never] [possible
values: auto, always, never]
--ignore-contain <name> Ignore directories containing the named entry
-h, --help Print help (see more with '--help')
-V, --version Print version
オプションはパターンやパスの後にも指定できることに注意してください。
ベンチマーク
私のホームフォルダで [0-9].jpg で終わるファイルを検索してみましょう。約 750,000 のサブディレクトリと約 400 万のファイルが含まれています。平均化と統計分析には、hyperfine を使用しています。以下のベンチマークは「ウォーム」/事前に埋められたディスクキャッシュで実行されています (「コールド」ディスクキャッシュの結果も同じ傾向を示します)。
まず find から始めましょう:
Benchmark 1: find ~ -iregex '.*[0-9]\.jpg$'
Time (mean ± σ): 19.922 s ± 0.109 s
Range (min … max): 19.765 s … 20.065 s
find は正規表現検索を実行する必要がない場合はるかに高速です:
Benchmark 2: find ~ -iname '*[0-9].jpg'
Time (mean ± σ): 11.226 s ± 0.104 s
Range (min … max): 11.119 s … 11.466 s
次に fd でも同じことを試してみましょう。fd はデフォルトで正規表現検索を実行することに注意してください。ここでは公平な比較のために -u/--unrestricted オプションが必要です。そうでなければ、fd は隠しフォルダや無視されたパスを走査する必要がありません (以下を参照):
Benchmark 3: fd -u '[0-9]\.jpg$' ~
Time (mean ± σ): 854.8 ms ± 10.0 ms
Range (min … max): 839.2 ms … 868.9 ms
この特定の例では、fd は find -iregex よりも約 23 倍高速で、find -iname よりも約 13 倍高速です。ちなみに、両方のツールはまったく同じ 546 個のファイルを見つけました :smile:。
注: これは 特定の マシンでの 特定の ベンチマークです。さまざまなテストを多数実行しました (そして一貫した結果が得られました) が、あなたの環境では異なるかもしれません! ぜひ皆さん自身で試してみることをお勧めします。必要なスクリプトはすべて このリポジトリ を参照してください。
fd の速度に関しては、ripgrep でも使用されている regex および ignore クレートのおかげが大きいです (ぜひチェックしてみてください!)。
トラブルシューティング
fd がファイルを見つけられない!
fd はデフォルトで隠しディレクトリとファイルを無視することを覚えておいてください。また、.gitignore ファイルのパターンも無視します。ありとあらゆる可能性のあるファイルを確実に見つけたい場合は、常に -u/--unrestricted オプション(または隠しファイルと無視対象ファイルを有効にする -HI)を使用してください:
> fd -u …
また、デフォルトでは fd はファイル名のみに基づいて検索し、パターンをフルパスと比較しないことにも注意してください。フルパスに基づいて検索したい場合(find の -path オプションと同様)は、--full-path(または -p)オプションを使用する必要があります。
カラー化された出力
fd は ls と同じように、拡張子ごとにファイルをカラー化できます。これが機能するには、環境変数 LS_COLORS が設定されている必要があります。通常、この変数の値は dircolors コマンドによって設定され、さまざまなファイル形式の色を定義するための便利な設定フォーマットを提供します。
ほとんどのディストリビューションでは、LS_COLORS はすでに設定されているはずです。Windows をお使いの場合、または代替の、より完全な(あるいはよりカラフルな)バリアントをお探しの場合は、こちら、こちら、またはこちらをご覧ください。
fd は NO_COLOR 環境変数も尊重します。
fd が正規表現パターンを正しく解釈してくれないようだ
多くの特殊な正規表現文字([]、^、$ など)は、シェルでも特殊文字です。疑わしい場合は、常に正規表現パターンをシングルクォートで囲むようにしてください:
> fd '^[A-Z][0-9]+$'
パターンがダッシュで始まる場合は、コマンドラインオプションの終わりを示すために -- を追加する必要があります。そうしないと、パターンがコマンドラインオプションとして解釈されてしまいます。あるいは、単一のハイフン文字を持つ文字クラスを使用してください:
> fd -- '-pattern'
> fd '[-]pattern'
alias やシェル関数に対する「コマンドが見つかりません」
シェルの alias やシェル関数は、fd -x や fd -X を介したコマンド実行には使用できません。zsh では、alias -g myalias="…" を介してエイリアスをグローバルにできます。bash では、export -f my_function を使用して子プロセスで利用できるようにできます。それでも fd -x bash -c 'my_function "$1"' bash を呼び出す必要があります。その他のユースケースやシェルでは、(一時的な)シェルスクリプトを使用してください。
-x/-X のプレースホルダー
シェルによっては、fd がプレースホルダー({}、{/}、{//}、{.}、{/.})を認識する前にシェルがそれらを解釈しないように、クォートする必要がある場合があります。
他のプログラムとの統合
fzf で fd を使用する
fd を使用して、コマンドラインのファジーファインダー fzf の入力生成ができます:
export FZF_DEFAULT_COMMAND='fd --type file'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
その後、ターミナルで vim <Ctrl-T> と入力して fzf を開き、fd の結果を検索できます。
あるいは、シンボリックリンクをたどり、隠しファイルを含める(ただし .git フォルダーは除外する)こともできます:
export FZF_DEFAULT_COMMAND='fd --type file --follow --hidden --exclude .git'
次のように設定することで、fzf 内で fd のカラー出力を使用することもできます:
export FZF_DEFAULT_COMMAND="fd --type file --color=always"
export FZF_DEFAULT_OPTS="--ansi"
詳細については、fzf README のヒントセクションをご覧ください。
rofi で fd を使用する
rofi は、stdin から読み取ってメニューを作成できるグラフィカルなランチメニューアプリケーションです。fd の出力を rofi の -dmenu モードにパイプすると、ファジー検索可能なファイルとディレクトリのリストを作成できます。
例
$HOME ディレクトリ以下の PDF ファイルの、大文字小文字を区別しない検索可能な複数選択リストを作成し、設定された PDF ビューアーで選択項目を開きます。すべてのファイルタイプをリストするには、-e pdf 引数を外してください。
fd --type f -e pdf . $HOME | rofi -keep-right -dmenu -i -p FILES -multi-select | xargs -I {} xdg-open {}
rofi によって表示されるリストを変更するには、fd コマンドに引数を追加します。rofi の検索動作を変更するには、rofi コマンドに引数を追加します。
emacs で fd を使用する
emacs パッケージの find-file-in-project は fd を使用してファイルを検索できます。
find-file-in-project をインストールした後、~/.emacs または ~/.emacs.d/init.el ファイルに
(setq ffip-use-rust-fd t) という行を追加してください。
emacs で M-x find-file-in-project-by-selected を実行すると、一致するファイルを検索できます。あるいは、
M-x find-file-in-project を実行すると、プロジェクト内で利用可能なすべてのファイルを一覧表示できます。
出力をツリーとして表示する
fd の出力をファイルツリーとして整形するには、tree コマンドを --fromfile とともに使用します:
❯ fd | tree --fromfile
これは tree を単独で実行するよりも便利な場合があります。tree はデフォルトでどのファイルも無視せず、
また何を表示するかを制御するための fd ほど豊富なオプションをサポートしていないためです:
❯ fd --extension rs | tree --fromfile
.
├── build.rs
└── src
├── app.rs
└── error.rs
bash などでは、単純にエイリアスを作成できます:
❯ alias as-tree='tree --fromfile'
xargs または parallel で fd を使用する
fd には -x/--exec および -X/--exec-batch オプションによるコマンド実行の
組み込み機能があることに注意してください。必要であれば、xargs と組み合わせて使用することもできます:
> fd -0 -e rs | xargs -0 wc -l
ここで、-0 オプションは fd に検索結果を(改行ではなく)NULL 文字で区切るように指示します。同様に、xargs の -0 オプションは、この方法で入力を読み取るように指示します。
インストール
Ubuntu の場合
...およびその他の Debian ベースの Linux ディストリビューション。
Ubuntu 19.04 (Disco Dingo) 以降を使用している場合は、 公式にメンテナンスされているパッケージをインストールできます:
apt install fd-find
バイナリ名 fd は別のパッケージですでに使用されているため、バイナリは fdfind と呼ばれることに注意してください。
インストール後、このドキュメントと同じ方法で fd を使用するために、コマンド
ln -s $(which fdfind) ~/.local/bin/fd を実行して fd へのリンクを追加することをお勧めします。
$HOME/.local/bin が $PATH に含まれていることを確認してください。
古いバージョンの Ubuntu を使用している場合は、リリースページから最新の .deb パッケージをダウンロードし、次でインストールできます:
dpkg -i fd_9.0.0_amd64.deb # adapt version number and architecture
このプロジェクトのリリースページにある .deb パッケージは、今でも実行ファイルを fd と命名していることに注意してください。
Debian の場合
Debian Buster 以降を使用している場合は、 公式にメンテナンスされている Debian パッケージをインストールできます:
apt-get install fd-find
バイナリ名 fd は別のパッケージですでに使用されているため、バイナリは fdfind と呼ばれることに注意してください。
インストール後、このドキュメントと同じ方法で fd を使用するために、コマンド
ln -s $(which fdfind) ~/.local/bin/fd を実行して fd へのリンクを追加することをお勧めします。
$HOME/.local/bin が $PATH に含まれていることを確認してください。
このプロジェクトのリリースページにある .deb パッケージは、今でも実行ファイルを fd と命名していることに注意してください。
Fedora の場合
Fedora 28 以降では、公式パッケージソースから fd をインストールできます:
dnf install fd-find
Alpine Linux の場合
適切なリポジトリが有効になっていれば、公式ソースから fd パッケージをインストールできます:
apk add fd
Arch Linux の場合
公式リポジトリから fd パッケージをインストールできます:
pacman -S fd
fd を AUR からインストールすることもできます。
Gentoo Linux の場合
公式リポジトリから fd ebuild を使用できます:
emerge -av fd
openSUSE Linux の場合
公式リポジトリから fd パッケージをインストールできます:
zypper in fd
Void Linux の場合
xbps-install を使用して fd をインストールできます:
xbps-install -S fd
ALT Linux の場合
公式リポジトリから fd パッケージをインストールできます:
apt-get install fd
Solus の場合
公式リポジトリから fd パッケージ をインストールできます:
eopkg install fd
RedHat Enterprise Linux (RHEL) 8/9/10、Almalinux 8/9/10、EuroLinux 8/9、Rocky Linux 8/9/10 の場合
Fedora Copr から fd パッケージ をインストールできます。
dnf copr enable tkbcopr/fd
dnf install fd
jemalloc の代わりに低速な malloc を使用する別バージョンも、EPEL8/9 リポジトリから fd-find パッケージとして入手できます。
macOS の場合
Homebrew を使って fd をインストールできます:
brew install fd
… または MacPorts を使う場合:
port install fd
Windows の場合
リリースページ からビルド済みバイナリをダウンロードできます。
あるいは、Scoop を使って fd をインストールできます:
scoop install fd
または Chocolatey を使う場合:
choco install fd
または Winget を使う場合:
winget install sharkdp.fd
GuixOS の場合
公式リポジトリから fd パッケージ をインストールできます:
guix install fd
Mise の場合
mise を使って、次のようなコマンドで fd をインストールできます:
mise use -g fd@latest
NixOS / Nix 経由の場合
Nix パッケージマネージャー を使って fd をインストールできます:
nix-env -i fd
Flox 経由の場合
Flox を使って fd を Flox 環境にインストールできます:
flox install fd
FreeBSD の場合
公式リポジトリから fd-find パッケージ をインストールできます:
pkg install fd-find
npm から
Linux と macOS では、fd-find パッケージをインストールできます:
npm install -g fd-find
ソースから
Rust のパッケージマネージャー cargo を使って、次のようにして fd をインストールできます:
cargo install fd-find
rust のバージョン 1.90.0 以降が必要であることに注意してください。
ビルドには make も必要です。
バイナリから
リリースページ には、Linux、macOS、Windows 用のコンパイル済みバイナリが含まれています。静的リンクされたバイナリも利用可能です。ファイル名に musl が含まれるアーカイブを探してください。
開発
git clone https://github.com/sharkdp/fd
# Build
cd fd
cargo build
# Run unit tests and integration tests
cargo test
# Install
cargo install --path .
補完
リリースアーカイブから
ビルド済みの補完ファイルは、Releases ページ のリリースアーカイブ (.tar.gz/.zip) 内の autocomplete ディレクトリに含まれています。
これらの補完を使用するには:
- bash:
~/.bashrc内でfd.bashファイルを source するか、自動的に source されるディレクトリに配置します。 - zsh:
_fdをfpath内のディレクトリ (例:~/.zfunc) に移動します。 - fish:
fd.fishを~/.config/fish/completions/にコピーします。 - powershell: プロファイルスクリプト のいずれかから
_fd.ps1を source します。
fd から生成する
fd --gen-completions <shell> を使って補完を直接生成することもできます:
# Bash
fd --gen-completions bash > ~/.local/share/bash-completion/completions/fd
# Zsh (ensure ~/.zfunc is in your fpath)
fd --gen-completions zsh > ~/.zfunc/_fd
# Fish
fd --gen-completions fish > ~/.config/fish/completions/fd.fish
# PowerShell
fd --gen-completions powershell >> $PROFILE
メンテナー
ライセンス
fd は MIT License と Apache License 2.0 の両方の条件の下で配布されています。
ライセンスの詳細については、LICENSE-APACHE および LICENSE-MIT ファイルを参照してください。