Skip to main content

Unix/Linux 的 fd 指令使用

fd 和 rg 一樣是用 rust 寫的多線程工具,一個要替代 find,另一個替代 grep,一樣都會自動忽略隱藏檔案和套用 .gitignore 規則。

常用參數

  • -e, --extension: 指定副檔名
  • -E, --exclude: 排除目錄或檔案
  • -g, --glob: 設定 GLOB 語法
  • -t f|d|l: 限定搜尋類型(檔案、資料夾、symbolic link)
  • -H: 包含隱藏檔
  • -I: 忽略 .gitignore
  • -uu: 搜索一切,包括隱藏、忽略、binary
  • -x: 搭配執行指令,例如刪除、移動
  • -0: 輸出 null 分隔,方便搭配 xargs -0
  • --search-path: 指定搜尋路徑(預設是 .)
  • --exec-batch: 多檔案批次執行(比 find/exec 更現代)

常用範例

刪除檔案

  1. 刪除圖片檔
fd -e jpg -e jpeg -e png -e gif -t f /path/to/directory -x rm
  1. 刪除 .DS_Store
fd -H -t f -a -g '.DS_Store' /path/to/directory -x rm

列出所有 test 開頭的 Python 檔案

fd '^test' -e py

排除多個 pattern

fd -E "{pattern1,pattern2}" . -e md

找出所有含圖檔的 markdown

fd -e md -x rg -i '\.(jpg|jpeg|png|gif)'

# 等效
fd -e md -x grep -iE '\.(jpg|jpeg|png|gif)' {}

# 也等效以下
find . \( -path '*/node_modules/*' -o -path '*/cache/*' -o -path './.git' \) -prune -o -type f -name '*.md' -exec grep -iE '\.(jpg|jpeg|png|gif)' {} \;