सभी फ़ाइलों और उप-निर्देशिकाओं को पुन: सूचीबद्ध करें


15

क्या कोई तरीका है, संभवतः पैकेज का उपयोग करके, सभी फ़ाइलों (पथों के साथ) और उप-निर्देशिकाओं (या कम से कम खाली उप-निर्देशिकाओं ) को सूचीबद्ध करने के लिए , क्योंकि गैर-रिक्त पथों के रास्तों को रास्ते से चमकाया जा सकता है वर्तमान निर्देशिका की फ़ाइलें शामिल हैं)?

निकटतम मुझे मिल सकता है पैकेज का projectile-find-fileकार्य projectile(वैकल्पिक रूप से, पैकेज का helm-projectile-find-fileकार्य helm-projectile), लेकिन यह खाली फ़ोल्डर को सूचीबद्ध करने में सक्षम नहीं लगता है। इसके अतिरिक्त, यह केवल Git और अन्य संस्करण नियंत्रण रिपॉजिटरी के साथ काम करने के लिए लगता है, लेकिन इस सीमा के लिए वर्कअराउंड हो सकता है।


2
आप क्या करने की कोशिश कर रहे हैं, लेकिन यह काफी स्पष्ट नहीं है, लेकिन [इस ब्लॉग पोस्ट] (www.turingmachine.org/bl/2013-05-29-recursively-listing-directories-in-elisp.html) में वह हो सकता है जिसकी आपको आवश्यकता है, या आप स्टार्टर के रूप में [इस एक] (ergoemacs.org/emacs/elisp_traverse_dir.html) की कोशिश कर सकते हैं।
द ओल्डोरिया

"सूची" से आपका क्या तात्पर्य है? क्या आप एक Emacs लिस्प फ़ंक्शन चाहते हैं जो रास्तों के साथ तार की सूची लौटाता है? क्या आप इसमें पथों के साथ एक बफर चाहते हैं, कहते हैं, प्रति पंक्ति एक? क्या आप सभी फाइलों के साथ एक बिंदीदार बफर चाहते हैं? (वह आखिरी आसान है, ds में ls स्विच में "-R" जोड़ें।)
उमर


@ उमर: मुझे आदर्श आवश्यकताएं हैं: (1) कि यह या तो एमएसीएस का हिस्सा होगा या पैकेज का हिस्सा होगा, (2) कि यह helmया तो साथ काम करेगा ivy, या यह कि परिणाम एक helmया ivyबफर में प्रदर्शित होंगे । यदि दोनों आवश्यकताओं को पूरा करना असंभव है, तो दूसरा मेरे लिए अधिक महत्वपूर्ण है।
इवान आद

1
यह वास्तव में दो अलग-अलग प्रश्न हैं। लेकिन ठीक है, मैंने प्रत्येक के लिए एक उत्तर प्रदान किया।
आकर्षित किया

जवाबों:


8

मान लें कि आप ivyइस फ़ंक्शन का उपयोग कर सकते हैं

    (defun fhd/counsel-everything ()
      "list everything recursively"
      (interactive)
      (let* ((cands (split-string
                     (shell-command-to-string "find .") "\n" t)))
        (ivy-read "File: " cands
                  :action #'find-file
                  :caller 'fhd/counsel-everything)))

धन्यवाद। अगर मैं उपयोग helmकरूँ तो ?
इवान आद

1
क्षमा करें, मुझे इसकी जानकारी नहीं है helmivyबहुत हल्का है। गोली दे दो।
fhdhsni

13

निर्देशिका-फ़ाइलें-रिकर्सिवली

(मुझे लगता है कि यह Emacs 25 में जोड़ा गया था)

यहाँ मैनुअल का लिंक है: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html

निर्देशिका के तहत सभी फाइलें लौटाएं जिनके नाम regexp से मेल खाते हैं। यह फ़ंक्शन निर्दिष्ट निर्देशिका और उसके उप-निर्देशिकाओं की खोज करता है, पुनरावर्ती रूप से, उन फ़ाइलों के लिए जिनके बेसनेम (यानी, प्रमुख निर्देशिकाओं के बिना) निर्दिष्ट regexp से मेल खाते हैं, और मेल खाने वाली फ़ाइलों की निरपेक्ष फ़ाइल नामों की सूची देता है (निरपेक्ष फ़ाइल नाम देखें) । फ़ाइल नाम गहराई-पहले क्रम में वापस आ जाते हैं, जिसका अर्थ है कि कुछ उप-निर्देशिका में फ़ाइलें इसके मूल निर्देशिका में फ़ाइलों से पहले वापस आ जाती हैं। इसके अलावा, प्रत्येक उपनिर्देशिका में पाई जाने वाली मिलान फ़ाइलों को उनके बेसनेम द्वारा वर्णानुक्रम में क्रमबद्ध किया जाता है। डिफ़ॉल्ट रूप से, निर्देशिका जिनके नाम regexp से मेल खाते हैं, उन्हें सूची से हटा दिया जाता है, लेकिन यदि वैकल्पिक तर्क शामिल-निर्देशिका गैर-शून्य है, तो वे शामिल हैं।

उदाहरण

(directory-files-recursively default-directory "")

यह खाली निर्देशिका नहीं
ढूँढता है

1
@fhdhsni क्या आपने सेटिंग include-directoriesकरने की कोशिश की t? मैं 24 Emacs पर काम कर रहा हूं, और अभी यह कोशिश नहीं कर सकता, लेकिन मैं कुछ घंटों में घर पर इसका परीक्षण कर सकता हूं।
wvxvw

मेरी गलती। मैंने ऐसा नहीं किया। आप इसे अपने उत्तर में शामिल करना चाह सकते हैं।
फ़दहस्नी

4

यह उत्तर मानता है कि आप फ़ाइल की सूची प्रदर्शित करना चाहते हैं और उनमें से एक लिस्प सूची प्राप्त करने के बजाय नामों को दर्ज करना चाहते हैं।

उपयोग मानक Emacs आदेश find-dired, find-name-dired, या find-grep-dired। पाया फ़ाइल और dir नाम Dired- मोड बफर में प्रदर्शित होते हैं। (आप परिणामों पर काम करने के लिए Dired की सारी शक्ति लगा सकते हैं।)

यदि आप लाइब्रेरी का उपयोग करते हैं find-dired+.elतो आपके पास उन मानक Emacs कमांड्स के वर्धित संस्करण हैं, आलीशान आपके पास एक कमांड है find-time-dired, जो ऐसी फाइलें ढूंढते हैं जो किसी दिए गए टाइमस्टैम्प से नई या पुरानी हैं।


find-diredवास्तव में मैं क्या देख रहा हूँ, लेकिन क्या केवल नाम छापने का एक तरीका है? क्योंकि अन्यथा एकल फ़ाइल नाम बिना किसी कारण के कई पंक्तियाँ लेता है क्योंकि मैं आकार, दिनांक, या फ़ाइलों की अनुमति का बिल्कुल ध्यान नहीं रखता। मैंने पहले दौड़ने की कोशिश की (setcar find-ls-option "-printf '%p\n'")है find-dired, लेकिन किसी कारण से इस तरह से एक आइटम पर एंटर दबाकर एक फ़ाइल को खोलना नहीं चाहता है ।
हाय-एंजेल

2
@ हाय-एंजेल: परिणाम प्रदर्शित किए जाने वाले बफ़र को Dired मोड में है। तो आप सिर्फ (/ बंद फ़ाइल नामों से अधिक दिखाने के लिए टॉगल कर सकते हैं । मैं इसे ज्यादातर समय छोड़ देता हूं (कोई विवरण नहीं दिखाया गया है), और जब मैं कुछ विवरणों की जांच करना चाहता हूं तो बस इसे संक्षेप में टॉगल कर दूंगा।
ड्रू

1

Https://github.com/technomancy/find-file-in-project देखें

फ़ाइल खोजने या निर्देशिका खोजने के लिए आदेश हैं। लेकिन दोनों नहीं।

यदि आप सभी उप-निर्देशिकाओं और फ़ाइलों को एक बफर में पुनरावर्ती रूप से सूचीबद्ध करना चाहते हैं, तो युगों के लिए Emacs में निर्मित दो कमांड हैं:

  1. M-x find-dired। यह सीएलआई उपकरण पर निर्भर है find। विंडोज में, आपको Cygwin या MYSYS स्थापित करने की आवश्यकता होती है जो कि हैfind

  2. M-x find-lisp-find-dired। जैसा find-diredकि लिस्प में लिखा गया है। इसलिए थर्ड पार्टी डिपेंडेंसी नहीं है। इसके अलावा, यह लोकल आउट ऑफ बॉक्स पहचान सकता है। लेकिन इसकी तुलना में धीमी हैfind-dired


मेरा उपयोग मामला यूनिक शेल कमांड ls, या एमएसीएस फ़ंक्शन का उपयोग करने वाले किसी भी व्यक्ति के समान होगा find-file, जो खाली निर्देशिकाओं सहित फ़ाइलों और निर्देशिकाओं दोनों को सूचीबद्ध करता है।
इवान आड

में हैं find-diredऔर find-lisp-find-diredपुनरावर्ती हैं कि वे न केवल वर्तमान निर्देशिका की सामग्री को सूचीबद्ध करते हैं, बल्कि इसके प्रत्येक उप-निर्देशिका, उप-उप-निर्देशिका, आदि की सामग्री को भी सूचीबद्ध करते हैं।
इवान आड

हाँ, पुनरावर्ती
बेन बिन

1

यह उत्तर मानता है कि आप फ़ाइल की लिस्प सूची प्राप्त करना चाहते हैं और उनमें से एक सूची को प्रदर्शित करने के बजाय डीर नाम देना चाहते हैं।

यदि आप लाइब्रेरी Dired + का उपयोग करते हैं तो आप फ़ंक्शन का उपयोग कर सकते हैं diredp-files-within। (इसका उपयोग करने के लिए आपको एक Dired बफर में होने की आवश्यकता नहीं है।)

यह किसी भी Emacs संस्करण के साथ काम करता है, और यह सामान्य से अधिक है directory-files-recursively

  • आप इसे फ़ाइलों और डायरियों की सूची में पारित कर सकते हैं , और यह उनमें से प्रत्येक में पुनरावर्ती कार्य करता है।

  • या आप इसे एक फ़ंक्शन पास कर सकते हैं जो इस तरह की सूची लौटाता है।

    • यदि किसी निर्देशिका के लिए एक डेडर्ड बफ़र है जो संसाधित हो जाता है, तो उस बफ़र में फ़ंक्शन को शामिल किया जाता है ताकि शामिल करने के लिए फ़ाइलों की सूची वापस आ सके।

      उदाहरण के लिए, यदि फ़ंक्शन है dired-get-marked-files तो केवल चिह्नित फाइलें और उपनिर्देशिकाएं शामिल हैं।

  • आप इसे एक विधेय पास कर सकते हैं कि प्रत्येक फ़ाइल या निर्देशिका को संतुष्ट करना होगा। Regexp मिलान बेशक एक प्रकार का विधेय है।

  • आप इसे सांकेतिक लिंक का पालन नहीं करने के लिए कह सकते हैं।


0
(डीफुन माय-डीर-लिस्ट (स्रोत)
  ;;
  ;; वर्तमान बफर में सूची फ़ाइलों को प्रिंट करें
  ;;
  ;; परीक्षित नहीं, तंत्र-प्रकार: गन्नू
  ;; परीक्षण किया गया, सिस्टम-प्रकार: विंडोज़-एनटी
  ;;
  (इंटरैक्टिव "sDirectory:")
  (चलो (एन 0)
    (l-file-dir (और (cd source) (डायरेक्टरी-फाइल्स-एंड-एट्रिब्यूट्स ./ ""))
    (डीआईआर-सूची ') ()
    (फ़ाइल-सूची ') ()
    )
    (प्रिंट (प्रारूप "% s \ n" डिफ़ॉल्ट-निर्देशिका) (वर्तमान-बफर))
    (जबकि एल-फाइल-डीआईआर
      (अगर (nth 1) (कार l-file-dir))
      (सेट एन) (१+ एन)
        डीआईआर-सूची (विपक्ष (लैम्ब्डा (स्रोत))
                  (और (नहीं (स्ट्रिंग-उपसर्ग-पी "।" (कार स्रोत)) स्रोत))
                (कार एल-फाइल-डीआईआर)) डीआईआर-सूची)
        )
    (प्रिंट) (प्रारूप "% s \ n" (डिफ़ॉल्ट डिफ़ॉल्ट निर्देशिका
                      (और (स्ट्रिंग-मैच "\\। [0-9 | Az]" (caar l-file-dir) 3)
                       (caar l-file-dir)))) (करंट-बफर)
    )
      (सेटैक एल-फाइल-डीआईआर (सीडीआर एल-फाइल-डीआईआर))
      )
    (जबकि (डार की सूची)
      (सेट डीआईआर-सूची (सीडीआर डीआईआर-सूची))
      (सीडी "..")
      )
    )
  'ठीक
  )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.