পুনরাবৃত্তভাবে সমস্ত ফাইল এবং উপ ডিরেক্টরি ডিরেক্টরি


15

কোনও প্যাকেজ ব্যবহার করে, সম্ভবত সমস্ত ফাইল (পাথ সহ) এবং উপ-ডিরেক্টরিগুলি (বা কমপক্ষে খালি সাব-ডিরেক্টরিগুলি তালিকাভুক্ত করার জন্য, যেহেতু খালি নয় এমন রাস্তাগুলি পাথগুলি থেকে সংগ্রহ করা যেতে পারে) বর্তমান ডিরেক্টরিতে থাকা ফাইলগুলি)?

নিকটস্থ আমি খুঁজে পাইনি projectile-find-fileফাংশন projectileপ্যাকেজ (অথবা, helm-projectile-find-fileফাংশন helm-projectileপ্যাকেজ), কিন্তু এটা যদি তালিকাটি খালি ফোল্ডার পাবে মনে হচ্ছে না। অতিরিক্তভাবে, এটি কেবল গিট এবং অন্যান্য সংস্করণ নিয়ন্ত্রণের সংগ্রহগুলির সাথেই কাজ করে বলে মনে হচ্ছে তবে এই সীমাবদ্ধতার জন্য কোনও কার্যকারিতা থাকতে পারে।


2
আপনি যা করার চেষ্টা করছেন তা পুরোপুরি শিউর করছি না, তবে [এই ব্লগ পোস্ট] (www.turingmachine.org/bl/2013-05-29-recursively-listing-directories-in-elisp.html) আপনার যা প্রয়োজন তা থাকতে পারে, অথবা আপনি [এটি এক] চেষ্টা করতে পারেন (এরগো] একটি স্টার্টার হিসাবে (ergoemacs.org/emacs/elisp_travers_dir.html)।
theldoria

"তালিকা" বলতে কী বোঝ? আপনি কি কোনও ইমাস লিস্প ফাংশন চান যা পথগুলির সাথে স্ট্রিংগুলির একটি তালিকা ফেরত দেয়? আপনি কি এতে পাথ সহ একটি বাফার চান, বলুন, প্রতি লাইনে একজন? আপনি কি সমস্ত ফাইল সহ একটি ডায়ার্ড বাফার চান? (এই শেষটি সহজ, লেয়ার সুইচেজে "-আর" যুক্ত করুন)
ওমর


@Omar: (1) যে এটি একটি প্যাকেজের গিয়ে Emacs উভয় অংশ বা অংশ, (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

ডিরেক্টরি-ফাইল-যাও recursively

(আমি মনে করি এটি ইম্যাক্স 25 এ যুক্ত হয়েছিল)

ম্যানুয়ালটির লিঙ্কটি এখানে রয়েছে: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html

ডিরেক্টরিতে থাকা সমস্ত ফাইল যাদের নাম regexp সাথে মেলে match এই ফাংশনটি নির্দিষ্ট ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলি অনুসন্ধান করে, যাঁর বেসনামগুলি (অর্থাত্ অগ্রণী ডিরেক্টরিগুলি ব্যতীত) নির্দিষ্ট পুনর্নির্মাণের সাথে মেলে এবং মিলিত ফাইলগুলির পরম ফাইলের নামের একটি তালিকা ফেরত দেয় (পরম ফাইলের নামগুলি দেখুন) । ফাইলের নামগুলি গভীরতা-প্রথম ক্রমে ফিরিয়ে দেওয়া হয় যার অর্থ কিছু উপ-ডিরেক্টরিতে থাকা ফাইলগুলি তার মূল ডিরেক্টরিতে থাকা ফাইলগুলির আগে ফিরে আসে। তদতিরিক্ত, প্রতিটি উপ-ডিরেক্টরিতে পাওয়া ফাইলগুলি মিলের অক্ষর অনুসারে বাছাই করা হয় base ডিফল্টরূপে, ডিরেক্টরিগুলি যাদের নাম regexp এর সাথে মেলে তা তালিকা থেকে বাদ দেওয়া হয়, তবে butচ্ছিক যুক্তিতে যদি ডিরেক্টরিগুলি অন্তর্ভুক্ত থাকে তবে তা অন্তর্ভুক্ত থাকে।

উদাহরণ

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

এটি খালি ডিরেক্টরিগুলি খুঁজে
পাচ্ছে

1
@fhdhsni আপনি কি সেট include-directoriesকরার চেষ্টা করেছেন t? আমি ইমাস 24 এ কাজ করছি, এবং এখনই এটি চেষ্টা করতে পারি না, তবে কয়েক ঘন্টার মধ্যে আমি বাড়িতে এটি পরীক্ষা করতে পারি।
wvxvw

আমার খারাপ। আমি তা করিনি। আপনি আপনার উত্তরে এটি অন্তর্ভুক্ত করতে চাইতে পারেন।
fhdhsni

4

এই উত্তরটি ধরে নিয়েছে যে আপনি ফাইল এবং দির নামগুলির একটি তালিকা প্রদর্শন করতে চান না , পরিবর্তে সেগুলির একটি তালিকা প্রদর্শন করতে চান ।

ব্যবহারের মান গিয়ে Emacs কমান্ড find-dired, find-name-diredঅথবা find-grep-dired। পাওয়া ফাইল এবং দির নামগুলি একটি ডিয়ারড-মোড বাফারে প্রদর্শিত হয়। (ফলাফলগুলিতে কাজ করার জন্য আপনি ডায়ার্ডের সমস্ত শক্তি রাখতে পারেন))

আপনি যদি গ্রন্থাগার ব্যবহার করেন find-dired+.elতবে আপনার কাছে সেই মানক Emacs কমান্ডগুলির বর্ধিত সংস্করণ রয়েছে, আপনার একটি কমান্ড রয়েছে find-time-dired, যা প্রদত্ত টাইমস্ট্যাম্পের চেয়ে নতুন বা পুরানো ফাইলগুলি সন্ধান করে।


find-diredঠিক আমি যা খুঁজছি, তা কি তবে কেবল নাম মুদ্রণের কোনও উপায় কি? কারণ অন্যথায় একক ফাইলের নাম অকারণে একাধিক লাইন গ্রহণ করে কারণ আমি একেবারে আকার, তারিখ এবং ফাইলগুলির অনুমতি গ্রহণ করি না। আমি (setcar find-ls-option "-printf '%p\n'")আগে চালানোর চেষ্টা করেছি find-dired, তবে কোনও কারণে এইভাবে ক্লান্ত হওয়া কোনও আইটেমের উপরে এন্টার টিপে কোনও ফাইল খুলতে চায় না ।
হাই-এঞ্জেল

2
@ হাই-অ্যাঞ্জেল: ফলাফলগুলি প্রদর্শিত বাফারটি ডিয়ার মোডে রয়েছে। সুতরাং আপনি কেবল (চালু / বন্ধ ফাইলের নামের চেয়ে বেশি টোগল প্রদর্শন করতে পারেন । আমি এটি বেশিরভাগ সময় ছেড়ে চলে যাই (কোনও বিবরণ দেখানো হয় না) এবং আমি যখন কিছু বিশদ পরীক্ষা করতে চাই তখন কেবল এটি সংক্ষিপ্তভাবে টগল করি।
ড্র

1

Https://github.com/technomancy/find-file-in-project দেখুন

ফাইল অনুসন্ধান করতে বা ডিরেক্টরিগুলি অনুসন্ধান করার জন্য কমান্ড রয়েছে। তবে দুটোই নয়।

আপনি যদি কেবলমাত্র একটি বাফারে সমস্ত উপ-ডিরেক্টরি এবং ফাইলগুলি পুনরাবৃত্তভাবে তালিকাবদ্ধ করতে চান তবে বয়সের জন্য ইমাসে দুটি কমান্ড নির্মিত হয়েছে:

  1. M-x find-dired। এটি সিএলআই সরঞ্জামের উপর নির্ভরশীল find। উইন্ডোজে আপনার সাইগউইন বা এমওয়াইওয়াইএস ইনস্টল করা দরকারfind

  2. M-x find-lisp-find-dired। যেমনটি find-diredকিন্তু লিপ্পে লেখা। সুতরাং তৃতীয় পক্ষের নির্ভরতা নেই। এছাড়াও, এটি বাক্সের বাইরে লোকাল চিনতে পারে। তবে এর চেয়ে ধীরfind-dired


আমার ব্যবহারের ক্ষেত্রে ইউএনআইএক্স শেল কমান্ড ls, বা ইম্যাকস ফাংশন ব্যবহার করা যে কোনওরকমই find-fileখালি ডিরেক্টরি সহ ফাইল এবং ডিরেক্টরি উভয়কেই তালিকাভুক্ত করে এমনটি হবে ।
ইভান আড

হয় find-diredএবং find-lisp-find-diredযে তারা বর্তমান ডিরেক্টরি না শুধুমাত্র বিষয়বস্তু তালিকায় recursive, কিন্তু তার একটি উপ-ডিরেক্টরির, সাব-উপ-ডিরেক্টরির ইত্যাদি প্রতিটি বিষয়বস্তু?
ইভান আড

হ্যাঁ, পুনরাবৃত্তভাবে
চেন বিন

1

এই উত্তরটি ধরে নিয়েছে যে আপনি তাদের তালিকা প্রদর্শন না করে ফাইল এবং দির নামের একটি তালিকাভুক্ত তালিকা পেতে চান।

আপনি যদি লাইব্রেরি ডায়ার্ড + ব্যবহার করেন তবে আপনি ফাংশনটি ব্যবহার করতে পারেন diredp-files-within। (এটি ব্যবহার করার জন্য আপনার কোনও বিরক্তিকর বাফারে থাকা উচিত নয়))

এই যে কোনো গিয়ে Emacs সংস্করণের সাথে কাজ করে, এবং এটি চেয়ে বেশি সাধারণ directory-files-recursively

  • আপনি এটি ফাইল এবং ডায়ারের একটি তালিকা পাস করতে পারেন এবং এটি তাদের প্রত্যেকটিতে পুনরাবৃত্তভাবে কাজ করে।

  • অথবা আপনি এটিকে এমন একটি ফাংশন পাস করতে পারেন যা এই জাতীয় তালিকাকে ফিরিয়ে দেয়।

    • যদি কোনও ডিরেক্টরিতে প্রক্রিয়াকরণের জন্য কোনও ডায়ার্ড বাফার থাকে তবে ফাংশনটি সেই বাফারে অন্তর্ভুক্ত ফাইলগুলির তালিকা ফিরিয়ে আনার জন্য অনুরোধ করা হয়।

      উদাহরণস্বরূপ, যদি ফাংশনটি হয় dired-get-marked-files তবে কেবল চিহ্নিত ফাইল এবং উপ-ডিরেক্টরি অন্তর্ভুক্ত করা হবে।

  • আপনি এটিকে একটি প্রাক্কলিত করতে পারেন যে প্রতিটি ফাইল বা ডিরেক্টরি অবশ্যই সন্তুষ্ট করতে পারে। রেজএক্সপ্যাক্স ম্যাচিং অবশ্যই এক ধরণের প্রাকটিক্ট।

  • আপনি এটি প্রতীকী লিঙ্কগুলি অনুসরণ না করতে বলতে পারেন।


0
(আমার-দির-তালিকাটি নির্ধারণ করুন (উত্স)
  ;;
  ;; বর্তমান বাফারে তালিকা মুদ্রণ ফাইল
  ;;
  ;; পরীক্ষিত নয়, সিস্টেম-প্রকার: gnu
  ;; পরীক্ষিত, সিস্টেমের ধরণ: উইন্ডোজ-এনটি
  ;;
  (ইন্টারেক্টিভ "এসডাইরেক্টরি:")
  (যাক ((এন 0)
    (l-file-dir (এবং (সিডি উত্স)) (ডিরেক্টরি-ফাইল-এবং-গুণাবলী "./")))
    (দির-তালিকা '())
    (ফাইল-তালিকা '())
    )
    (প্রিন্ট (ফর্ম্যাট "% s \ n" ডিফল্ট ডিরেক্টরি) (বর্তমান-বাফার))
    (যখন এল-ফাইল-ডির
      (যদি (নবম 1 (গাড়ী এল-ফাইল-দির))
      (সেটেক এন (1+ এন)
        dir-list (কনস ((ল্যাম্বদা (উত্স))
                  (এবং (স্ট্রিং-উপসর্গ-পি "।" (গাড়ির উত্স))) উত্স)
                (গাড়ী এল-ফাইল-দির)) দির-তালিকা)
        )
    (প্রিন্ট (ফর্ম্যাট "% s \ n" (কনক্যাট ডিফল্ট ডিরেক্টরি)
                      (এবং (স্ট্রিং-ম্যাচ "\\। [0-9 | Az]" (সিএআর এল-ফাইল-দির))
                       (সিএআর এল-ফাইল-দির)))) (বর্তমান-বাফার)
    )
      (সেটেক এল-ফাইল-দির (সিডিআর এল-ফাইল-দির))
      )
    (যখন (caar dir-list)
      (সেটেক দির-তালিকা (সিডির দির-তালিকা))
      (সিডি "..")
      )
    )
  'ঠিক আছে
  )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.