13 điểm bởi GN⁺ 2025-03-20 | 2 bình luận | Chia sẻ qua WhatsApp
  • 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.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

 
dbs0829 2025-03-20

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.

 
GN⁺ 2025-03-20
Ý kiến trên Hacker News
  • Đã phát hành một workflow cho Alfred. Dùng fd rấ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ệt
    • hyperfine cũng là một công cụ tuyệt vời nhưng bị đánh giá thấp
  • Là fan của sharkdp. Cảm ơn vì đã tạo ra những phần mềm tuyệt vời mà tôi dùng mỗi ngày
    • Dùng bat, fd, hexyl, hyperfine
    • Nếu các kỹ sư được trả lương cao quyên góp $10 mỗi tháng thì Internet sẽ tốt đẹp hơn
    • Có rất nhiều công cụ tuyệt vời và chúng ta nên xây dựng một hệ sinh thái để hỗ trợ chúng
  • Có thể cài nhanh fd, bat, numbat, hexyl, hyperfine và xem ảnh chụp màn hình trên Terminal Trove
    • Có cung cấp liên kết cho fd, bat, numbat, hyperfine, hexyl
    • Có thể cài đặt và xem ảnh chụp màn hình
  • Ước gì các cờ của fdrg thống nhất với nhau. Ví dụ, cả fdrg đều có cờ --type nhưng ý nghĩa lại khác nhau
    • fd dùng để chỉ file/thư mục/liên kết tượng trưng, còn rg dùng để chỉ kiểu MIME của file
    • fd có cờ --extension nhưng rg thì không
    • Vì hai công cụ này có mức độ được dùng cùng nhau rất cao, nên các cờ có tên tương tự sẽ hữu ích
  • Lý do tôi không dùng các công cụ Rust mới là vì khó nhớ các tùy chọn của công cụ gốc
    • Dùng ripgrep trong VS Code nhưng trên dòng lệnh thì dùng grep
    • Chỉ cần công cụ hoạt động là được, nó được viết bằng ngôn ngữ gì không quan trọng
    • GNU Stow được viết bằng Perl nhưng vẫn là một trong những công cụ Unix tôi thích nhất
    • Kể cả là công cụ thay thế thả vào dùng ngay thì tôi cũng sẽ không tự cài thủ công
    • Với tư cách người dùng, cải thiện tốc độ và an toàn bộ nhớ không quan trọng
    • Các ngôn ngữ khác như Go cũng đảm bảo an toàn bộ nhớ và có mức độ tham gia cộng đồng cao
    • Tôi không hoàn toàn bị thuyết phục bởi câu chuyện Rust là vị cứu tinh
    • Nếu macOS hay Ubuntu thay thế bằng bản thay thế viết bằng Rust mà không ảnh hưởng workflow thì tôi cũng không phàn nàn
  • Thỉnh thoảng nên ghé Terminal Trove
    • Có thể tìm được các lựa chọn thay thế dễ dùng cho những công cụ hay dùng
    • find có thể thay bằng fd, time bằng hyperfine, grep bằng ripgrep
    • t-rec để chuyển asciinema thành .gif, koji để tạo commit thủ công, v.v.
  • Tôi định sẽ thử fd. Khó nhớ cách dùng đối số của find nên tôi chủ yếu dùng find . | grep what_i_am_looking_for
    • Tôi thích cách nó tích hợp với xargs
    • Tôi chưa tìm ra fd xử lý việc duyệt thư mục symlink như thế nào
  • Tôi dùng fd rất nhiều mỗi ngày và cài mặc định trên thiết bị mới
    • Đã dùng find rất lâu nhưng nó không hẳn tiện dụng
    • Tôi đồng ý 100% với xu hướng các tiện ích thay thế gần đây
    • Có thể chúng không giữ lại toàn bộ độ linh hoạt của bản gốc, nhưng với các trường hợp phổ biến thì dễ dùng hơn nhiều
  • Việc mặc định bỏ qua nhiều thư mục khá bất tiện
    • Khi muốn biết một thứ nằm ở đâu trong hệ thống, tôi dùng find
    • fd có tùy chọn không bỏ qua nhưng tôi không nhớ, nên lại quay về find
  • Tôi thích các công cụ CLI mới viết bằng Rust, nhưng fd lại khó nhớ cách dùng như tarln
    • Không phải lỗi của ai cả
    • Tôi luôn phải đọc lại tài liệu hướng dẫn
    • Dù GNU find có nhiều điểm kỳ quặc, tôi vẫn nhớ nó tốt hơn