ファイルを検索したい(fd)
$ fd 検索条件 検索パス
findの代替コマンドです。
.gitignoreに書かれているファイルは無視してくれます。
findと引数の位置が入れ替わっているのはちょっと罠です。
検索パターンはデフォルトで正規表現として扱われます。
globパターンを使いたい場合は--globオプションを付けます。
インストール
$ brew install fd
$ fd --version
fd 10.4.2
拡張子で探したい(-e / --extension)
// HTMLファイルを探したい
$ fd --extension html 検索パス
$ fd -e html 検索パス
// ZIPファイルを探したい
$ fd --extension zip 検索パス
$ fd -e zip 検索パス
--extensionオプションを使ってファイルの拡張子を指定して検索できます。
find -name "*.html"とは異なり、.や*を付けずに拡張子名だけを指定します。
ファイルの種類で探したい(-t / --type)
// ファイルを探したい; find 検索パス -type f
$ fd --type file 検索パス
$ fd -t f 検索パス
// ディレクトリを探したい; find 検索パス -type d
$ fd --type directory 検索パス
$ fd -t d 検索パス
// シンボリックリンクを探したい; find 検索パス -type l
$ fd --type symlink 検索パス
$ fd -t l 検索パス
// 空のディレクトリを探したい; find 検索パス -type d -empty
$ fd --type directory --type empty 検索パス
$ fd -t d -t empty 検索パス
// 実行可能なファイルを探したい
$ fd --type executable 検索パス
$ fd -t x 検索パス
--typeオプションを使ってファイルの種類で検索できます。
--typeオプションは重ねがけできるので--type directory --type emptyで空のディレクトリを検索できます。
--type executableで実行可能なファイルを検索できます。
タイムスタンプで探したい(--changed-within / --changed-before)
// 7日以内に変更されたファイルを探したい
$ fd --changed-within 7d 検索パス
// 28日以上前から変更されていないファイルを探したい
$ fd --changed-before 28d 検索パス
--changed-within・--changed-beforeオプションで、
ファイルの最終更新日時(findの-mtime相当)を基準に検索できます。
findのように作成日・最終アクセス日を個別に指定するオプションはありません。
サイズで探したい(-S / --size)
// 100kB以上のファイルを探したい
$ fd --size +100k 検索パス
$ fd -S +100k 検索パス
// 10MB以上のファイルを探したい
$ fd --size +10M 検索パス
$ fd -S +10M 検索パス
// 10MB - 50MBのファイルを探したい
$ fd --size +10M --size -50M 検索パス
$ fd -S +10M -S -50M 検索パス
--sizeオプションでファイルサイズを基準に検索できます。
深さを指定したい(-d / --max-depth)
// 2階層目まで探したい
$ fd --max-depth 2 検索パターン 検索パス
$ fd -d 2 検索パターン 検索パス
// 4階層目まで探したい
$ fd --max-depth 4 検索パターン 検索パス
$ fd -d 4 検索パターン 検索パス
--max-depthオプションで検索する階層の深さを指定できます。
正規表現で探したい(デフォルト)
$ fd 正規表現 検索パス
fdは検索パターンをデフォルトで正規表現として扱います。
find -regexのように専用オプションは不要です。
globパターンを使いたい場合は--globオプションを付けます。
検索結果の出力形式を変えたい(--exec-batch ls -l)
// 検索結果を ls -l 形式で書きだす
$ fd 検索パターン 検索パス --exec-batch ls -l
$ fd 検索パターン 検索パス -X ls -l
find -lsに相当する専用オプションはありませんが、
-X/--exec-batchオプションでls -lを呼び出すことで同じ結果が得られます。
空のディレクトリを削除したい
$ fd --type directory --type empty 検索パス --exec-batch rmdir
$ fd -t d -t empty 検索パス -X rmdir
--type directory --type emptyで空のディレクトリを検索し、
-X/--exec-batchオプションでrmdirを呼び出すと一括削除できます。
パイプ処理したい(-x / -X)
$ fd 検索条件 検索パス --exec コマンド
$ fd 検索条件 検索パス -x コマンド
$ fd 検索条件 検索パス --exec-batch コマンド
$ fd 検索条件 検索パス -X コマンド
fdにはxargs相当の機能が組み込まれています。
-x/--execは検索結果1件ごとにコマンドを実行し、
-X/--exec-batchは検索結果をまとめて1回のコマンドに渡します。