13 पॉइंट द्वारा GN⁺ 2025-03-20 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • fd फ़ाइल सिस्टम में आइटम खोजने का एक प्रोग्राम है, जो पारंपरिक find कमांड का एक सरल, तेज़ और user-friendly विकल्प है
    • यह find की सभी सुविधाओं को सपोर्ट नहीं करता, लेकिन सामान्य उपयोग के मामलों के लिए समझदारी भरे default प्रदान करता है
  • Windows, macOS, Linux
  • सहज syntax: fd PATTERN फ़ॉर्म में आसानी से उपयोग किया जा सकता है (find -iname '*PATTERN*' से अधिक सुविधाजनक)
  • regular expression और glob pattern सपोर्ट
  • parallel directory traversal के ज़रिए तेज़ performance
  • फ़ाइल प्रकार के अनुसार color highlighting (ls की तरह)
  • parallel command execution सपोर्ट
  • smart case sensitivity: डिफ़ॉल्ट रूप से case ignore करता है, लेकिन uppercase शामिल होने पर case-sensitive बन जाता है
  • hidden files और directories को डिफ़ॉल्ट रूप से ignore करता है
  • .gitignore pattern को डिफ़ॉल्ट रूप से मानता है
  • कमांड का नाम find से 50% छोटा है

उपयोग

  • वर्तमान directory में pattern वाले आइटम खोजें fd netfl
  • regular expression का उपयोग करके खोजें fd '^x.*rc$'
  • किसी विशेष directory में खोजें fd passwd /etc
  • वर्तमान directory के नीचे सभी files को recursively list करें fd
  • किसी विशेष file type को खोजें (-e option का उपयोग) fd -e md
  • सटीक filename खोजें (-g option का उपयोग) fd -g libc.so /usr
  • hidden files और ignored files सहित खोजें (-H, -I option का उपयोग) fd -H pre-commit fd -I num_cpu
  • filename नहीं, पूरी path में खोजें (-p option का उपयोग) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • हर search result पर कमांड चलाएँ (-x) fd -e zip -x unzip
  • सभी search results को एक ही कमांड को दें (-X) fd -g 'test_*.py' -X vim
  • placeholder syntax
    • {}: search result का पूरा path
    • {.}: file extension के बिना path
    • {/}: filename
    • {//}: parent directory
    • {/.}: filename से extension हटाकर
  • किसी विशेष directory या file को exclude कर सकते हैं (-E option का उपयोग) fd -H -E .git
  • .fdignore फ़ाइल बनाकर global exclude pattern सेट कर सकते हैं
  • खोजी गई files delete कर सकते हैं (-X rm) fd -H '^\.DS_Store$' -tf -X rm

मुख्य कमांड options

  • -H: hidden files और directories सहित खोज
  • -I: .gitignore और .fdignore को ignore करें
  • -p: पूरी path में खोज
  • -e: किसी विशेष extension की खोज
  • -x: search result पर कमांड चलाएँ
  • -X: सभी search results को एक ही कमांड को दें
  • -E: किसी विशेष file या directory को exclude करें

प्रदर्शन तुलना (Benchmark)

  • 750,000 directories और 40 लाख files पर search test के परिणाम
    • find performance: लगभग 19.9 सेकंड
    • fd performance: लगभग 854.8ms
  • find से 23 गुना तेज़

दूसरे प्रोग्रामों के साथ integration

  • fd search result को fzf में दिखाया जा सकता है export FZF_DEFAULT_COMMAND='fd --type file'
  • fd output को rofi में मेनू के रूप में दिखाएँ fd --type f -e pdf . $HOME | rofi -dmenu
  • output को tree structure में दिखाएँ fd | tree --fromfile
  • search result को xargs में उपयोग करें fd -0 -e rs | xargs -0 wc -l

2 टिप्पणियां

 
dbs0829 2025-03-20

neovim plugin में से एक fd इस्तेमाल करता है, इसलिए मैंने इसे इंस्टॉल किया था और तब से अब तक यही इस्तेमाल कर रहा हूँ, हाहा.

 
GN⁺ 2025-03-20
Hacker News टिप्पणियाँ
  • Alfred workflow जारी किया है। custom directories खोजने के लिए fd का बहुत उपयोग करता हूँ। इसे हर दिन इस्तेमाल करता हूँ और यह शानदार है
    • Hyperfine भी कम आंका गया एक बेहतरीन टूल है
  • sharkdp का फैन हूँ। हर दिन इस्तेमाल होने वाला इतना बढ़िया software बनाने के लिए धन्यवाद
    • bat, fd, hexyl, hyperfine इस्तेमाल करता हूँ
    • अगर अच्छी तनख्वाह पाने वाले engineers हर महीने $10 दान करें, तो इंटरनेट और बेहतर हो जाएगा
    • बहुत से शानदार tools हैं, और इन्हें support करने वाला ecosystem बनाना चाहिए
  • fd, bat, numbat, hexyl, hyperfine को जल्दी install किया जा सकता है और Terminal Trove में screenshots देखे जा सकते हैं
    • fd, bat, numbat, hyperfine, hexyl के links दिए गए हैं
    • install और screenshots देखना संभव है
  • काश fd और rg के flags एक जैसे होते। उदाहरण के लिए, fd और rg दोनों में --type flag है, लेकिन उसका मतलब अलग है
    • fd में इसका मतलब file/directory/symbolic link आदि होता है, जबकि rg में file MIME type होता है
    • fd में --extension flag है, लेकिन rg में नहीं है
    • दोनों tools का उपयोग काफ़ी जुड़ा हुआ है, इसलिए मिलते-जुलते नाम वाले flags उपयोगी होंगे
  • मैं नए Rust tools इसलिए इस्तेमाल नहीं करता क्योंकि मूल tools के options याद रखना ही मुश्किल है
    • VS Code में ripgrep इस्तेमाल करता हूँ, लेकिन command line पर grep इस्तेमाल करता हूँ
    • जब तक tool काम करता है, यह किस language में लिखा गया है, इससे फ़र्क नहीं पड़ता
    • GNU Stow Perl में लिखा गया है, लेकिन यह मेरे पसंदीदा Unix tools में से एक है
    • Rust tools अगर drop-in replacement भी हों, तब भी मैं उन्हें manually install नहीं करूँगा
    • एक user के रूप में speed improvements और memory safety मेरे लिए महत्वपूर्ण नहीं हैं
    • Go जैसी दूसरी languages भी memory safety देती हैं, और community participation भी ज़्यादा है
    • मैं इस कहानी से पूरी तरह सहमत नहीं हूँ कि Rust ही उद्धारक है
    • अगर macOS या Ubuntu इन्हें Rust replacements से बदल दें और मेरे workflow पर असर न पड़े, तो मुझे कोई शिकायत नहीं होगी
  • Terminal Trove को कभी-कभी देखना चाहिए
    • अक्सर इस्तेमाल होने वाले tools के आसान replacements मिल सकते हैं
    • find को fd से, time को hyperfine से, grep को ripgrep से बदला जा सकता है
    • asciinema को .gif में बदलने वाला t-rec, manually commits बनाने वाला koji आदि
  • fd आज़माने वाला हूँ। find के arguments का इस्तेमाल याद रखना मुश्किल है, इसलिए ज़्यादातर find . | grep what_i_am_looking_for इस्तेमाल करता हूँ
    • xargs के साथ इसका integrated behavior पसंद है
    • fd symlink directories की traversal को कैसे handle करता है, यह नहीं ढूँढ पाया
  • हर दिन fd का बहुत उपयोग करता हूँ और नए device पर इसे default रूप से install करता हूँ
    • find को लंबे समय तक इस्तेमाल किया, लेकिन इसकी usability सुविधाजनक नहीं है
    • हाल की replacement utilities वाली trend से 100% सहमत हूँ
    • यह मूल की सारी flexibility बनाए न रखे, फिर भी सामान्य मामलों में इस्तेमाल करना कहीं आसान है
  • default रूप से बहुत से folders को ignore करना असुविधाजनक है
    • जब जानना हो कि सिस्टम में कुछ कहाँ है, तो find इस्तेमाल करता हूँ
    • fd में ignore न करने का option है, लेकिन वह याद नहीं रहता, इसलिए फिर find पर लौट आता हूँ
  • नए Rust CLI tools पसंद हैं, लेकिन fd को tar और ln की तरह इस्तेमाल करना याद रखना मुश्किल है
    • इसमें किसी की गलती नहीं है
    • हर बार manual फिर से पढ़ना पड़ता है
    • GNU find की विचित्रताओं के बावजूद वही ज़्यादा याद रहता है