fd: tìm file đơn giản và nhanh hơn lệnh find
Tóm tắt
fd tìm file với cú pháp ngắn, mặc định bỏ qua file ẩn và file bị .gitignore. -e lọc đuôi, -t lọc loại, -H -I để tìm cả file ẩn, -x chạy song song từng file, -X gom thành một lệnh.
Lệnh find rất mạnh nhưng cú pháp khó nhớ: find . -type f -name "*.py" -not -path "*/node_modules/*" chỉ để tìm file Python. fd là lựa chọn thay thế đơn giản và nhanh: cú pháp ngắn, mặc định bỏ qua file ẩn và những gì .gitignore loại trừ, tô màu kết quả, và chạy lệnh song song trên từng kết quả. Nó không làm được mọi thứ find làm, nhưng xử lý gọn 90% tình huống hằng ngày.

Cài đặt
brew install fd # macOS
sudo apt install fd-find # Ubuntu/Debian: lệnh tên là fdfind
cargo install fd-find # có Rust
# Trên Ubuntu
ln -s $(which fdfind) ~/.local/bin/fd
So sánh nhanh với find
| Việc cần làm | find | fd |
|---|---|---|
| File có "config" trong tên | find . -iname '*config*' | fd config |
| Mọi file .py | find . -name '*.py' | fd -e py |
| Chỉ thư mục | find . -type d -name 'test*' | fd -t d '^test' |
| Gồm file ẩn và bị ignore | (mặc định) | fd -H -I pattern |
| Sửa trong 2 ngày gần đây | find . -mtime -2 | fd --changed-within 2d |
Mẫu tìm kiếm của fd mặc định là regex và dùng smart case: viết thường thì không phân biệt hoa thường, có chữ hoa thì phân biệt. Muốn dùng glob kiểu shell, thêm -g: fd -g '*.test.ts'.
Chạy lệnh trên từng kết quả
# -x: chạy song song cho từng file
fd -e jpg -x convert {} {.}.png
# -X: gom mọi kết quả vào MỘT lệnh
fd -e ts -X prettier --write
# Xoá các thư mục node_modules lồng nhau (cần -I vì chúng bị ignore)
fd -I -t d '^node_modules$' -X rm -rf
| Placeholder | Ý nghĩa | Ví dụ với src/img/a.jpg |
|---|---|---|
{} | Đường dẫn đầy đủ | src/img/a.jpg |
{.} | Bỏ đuôi file | src/img/a |
{/} | Chỉ tên file | a.jpg |
{//} | Thư mục cha | src/img |
Lưu ý
- Không thấy file mình biết chắc tồn tại? Có thể nó bị
.gitignorehoặc là file ẩn; thử thêm-H -I. - Cẩn thận khi ghép với
rm: chạy lệnh fd không có-x/-Xtrước để xem danh sách sẽ bị xoá. - Loại thư mục cụ thể bằng
-E, ví dụfd -e log -E vendor.
Áp dụng thế nào?
- Dev: Dùng fd làm nguồn cho fzf (
FZF_DEFAULT_COMMAND='fd --type f') để tìm file nhanh như "Go to file" của IDE. - Tech Lead: Viết script dọn dẹp, chuyển đổi hàng loạt (ảnh, định dạng code) bằng
-x/-Xthay cho vòng lặp shell dễ lỗi khi tên file có khoảng trắng. - PM: Khi cần thống kê nhanh (bao nhiêu file test, file cấu hình),
fd -e test.ts | wc -lcho con số ngay.
Nguồn & tham khảo
- sharkdp/fd — sharkdp (GitHub)