fd là một chương trình để tìm các mục trong hệ thống tệp, là lựa chọn thay thế đơn giản hơn, nhanh hơn và thân thiện với người dùng hơn so với lệnh find
- Dù không hỗ trợ mọi tính năng của
find, nó cung cấp các giá trị mặc định hợp lý cho những trường hợp sử dụng phổ biến
- Windows, macOS, Linux
- Cú pháp trực quan: có thể dùng đơn giản theo dạng
fd PATTERN (thuận tiện hơn find -iname '*PATTERN*')
- Hỗ trợ biểu thức chính quy và mẫu glob
- Duyệt thư mục song song cho hiệu năng cao
- Tô màu nổi bật theo loại tệp (tương tự
ls)
- Hỗ trợ thực thi lệnh song song
- Phân biệt chữ hoa chữ thường thông minh: mặc định không phân biệt, nhưng sẽ phân biệt nếu có chữ in hoa
- Mặc định bỏ qua tệp và thư mục ẩn
- Mặc định bỏ qua các mẫu trong
.gitignore
- Tên lệnh ngắn hơn
find 50%
Cách dùng
- Tìm các mục có chứa mẫu trong thư mục hiện tại
fd netfl
- Có thể tìm bằng biểu thức chính quy
fd '^x.*rc$'
- Tìm trong một thư mục cụ thể
fd passwd /etc
- Liệt kê đệ quy mọi tệp bên dưới thư mục hiện tại
fd
- Có thể tìm theo phần mở rộng tệp (dùng tùy chọn
-e) fd -e md
- Có thể tìm theo tên tệp chính xác (dùng tùy chọn
-g) fd -g libc.so /usr
- Tìm bao gồm tệp ẩn và tệp bị bỏ qua (dùng tùy chọn
-H, -I) fd -H pre-commit fd -I num_cpu
- Tìm trong toàn bộ đường dẫn thay vì chỉ tên tệp (dùng tùy chọn
-p) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
- Thực thi lệnh cho từng kết quả tìm được (
-x) fd -e zip -x unzip
- Truyền tất cả kết quả tìm kiếm vào một lệnh duy nhất (
-X) fd -g 'test_*.py' -X vim
- Cú pháp placeholder
- {}: toàn bộ đường dẫn của kết quả tìm được
- {.}: đường dẫn bỏ phần mở rộng tệp
- {/}: tên tệp
- {//}: thư mục cha
- {/.}: tên tệp bỏ phần mở rộng
- Có thể loại trừ thư mục hoặc tệp cụ thể (dùng tùy chọn
-E) fd -H -E .git
- Có thể tạo tệp
.fdignore để thiết lập mẫu loại trừ toàn cục
- Có thể xóa các tệp tìm được (
-X rm) fd -H '^\.DS_Store$' -tf -X rm
Các tùy chọn lệnh chính
- -H: tìm bao gồm tệp và thư mục ẩn
- -I: bỏ qua
.gitignore và .fdignore
- -p: tìm trong toàn bộ đường dẫn
- -e: tìm theo phần mở rộng cụ thể
- -x: thực thi lệnh trên kết quả tìm kiếm
- -X: truyền tất cả kết quả tìm kiếm vào một lệnh
- -E: loại trừ tệp hoặc thư mục cụ thể
So sánh hiệu năng (Benchmark)
- Kết quả thử nghiệm tìm kiếm trên 750.000 thư mục và 4 triệu tệp
- Hiệu năng
find: khoảng 19,9 giây
- Hiệu năng
fd: khoảng 854,8ms
- Nhanh hơn
find 23 lần
Tích hợp với các chương trình khác
- Có thể hiển thị kết quả tìm kiếm của
fd trong fzf export FZF_DEFAULT_COMMAND='fd --type file'
- Hiển thị đầu ra của
fd thành menu trong rofi fd --type f -e pdf . $HOME | rofi -dmenu
- Hiển thị kết quả đầu ra theo cấu trúc cây
fd | tree --fromfile
- Có thể dùng kết quả tìm kiếm trong
xargs fd -0 -e rs | xargs -0 wc -l
2 bình luận
Có một plugin của neovim dùng
fd, nên tôi đã cài thử và từ đó dùng đến tận bây giờ luôn haha.Ý kiến trên Hacker News
fdrất nhiều để tìm kiếm trong các thư mục tùy chỉnh. Dùng hằng ngày và nó rất tuyệthyperfinecũng là một công cụ tuyệt vời nhưng bị đánh giá thấpbat,fd,hexyl,hyperfinefd,bat,numbat,hexyl,hyperfinevà xem ảnh chụp màn hình trên Terminal Trovefd,bat,numbat,hyperfine,hexylfdvàrgthống nhất với nhau. Ví dụ, cảfdvàrgđều có cờ--typenhưng ý nghĩa lại khác nhaufddùng để chỉ file/thư mục/liên kết tượng trưng, cònrgdùng để chỉ kiểu MIME của filefdcó cờ--extensionnhưngrgthì khôngripgreptrong VS Code nhưng trên dòng lệnh thì dùnggrepfindcó thể thay bằngfd,timebằnghyperfine,grepbằngripgrept-recđể chuyểnasciinemathành.gif,kojiđể tạo commit thủ công, v.v.fd. Khó nhớ cách dùng đối số củafindnên tôi chủ yếu dùngfind . | grep what_i_am_looking_forxargsfdxử lý việc duyệt thư mục symlink như thế nàofdrất nhiều mỗi ngày và cài mặc định trên thiết bị mớifindrất lâu nhưng nó không hẳn tiện dụngfindfdcó tùy chọn không bỏ qua nhưng tôi không nhớ, nên lại quay vềfindfdlại khó nhớ cách dùng nhưtarvàlnfindcó nhiều điểm kỳ quặc, tôi vẫn nhớ nó tốt hơn