ব্যাশ কমান্ড ব্যবহার করে ফোল্ডারগুলি তালিকাভুক্ত করবেন কীভাবে?


52

ব্যাশ কমান্ড ব্যবহার করে কোনও ডিরেক্টরিতে কেবল ফোল্ডারগুলি তালিকাভুক্ত করার কোনও উপায় আছে কি? (যেমন lsকমান্ডটি সমস্ত ফাইল এবং ফোল্ডার তালিকাভুক্ত করে)

উত্তর:


66

তুমি ব্যবহার করতে পার:

ls -d -- */

যেহেতু সমস্ত ডিরেক্টরি শেষ হয় /, এটি কেবল বর্তমান পথের ডিরেক্টরিগুলি তালিকাভুক্ত করে। -D বিকল্প নিশ্চিত করে যে শুধুমাত্র ডিরেক্টরির নাম ছাপা হয়, তাদের বিষয়বস্তু।


2
ls - * / নীচের সমস্ত বিষয়বস্তু সহ সমস্ত ডিরেক্টরি তালিকাভুক্ত করে
ভিন

1
@ 8088 ls -d -- */এবং এর মধ্যে পার্থক্য কী ls -d */?
লুই লন্ডন

5
@ লুইস, --প্রচলিতভাবে বিকল্পগুলির শেষ চিহ্নিত করতে ব্যবহৃত হয়, যাতে কোনও ফাইলের নামকরণ করা হয় তবে -lls এটি দীর্ঘ তালিকা বিন্যাসের বিকল্প হিসাবে ব্যাখ্যা করবে না।
ক্রিশ্চিয়ান সিপিতু

28

স্টিফেন মার্টিনের প্রতিক্রিয়া একটি সতর্কতা দিয়েছে এবং বর্তমান ফোল্ডারটিও তালিকাভুক্ত করেছে, তাই আমি পরামর্শ দেব

find . -mindepth 1 -maxdepth 1 -type d

(এটি লিনাক্সে রয়েছে; আমি পসিক্স ম্যান পৃষ্ঠাতে -ম্যাক্সডেপথ এবং -মাইন্ডপথ খুঁজে পাইনি)


1
পুরানো প্রশ্ন আমি জানি। যদিও আমি খুব প্রথম দিকে এই কাজটি সন্ধান করতে চাই, আমি ls -d -- */বিকল্পটি পছন্দ করি, যেমনটি findলুকানো পরিচালকও পাওয়া যাবে। যা কখনও কখনও কাজে লাগতে পারে তবে মাঝে মাঝে ঝামেলাও সৃষ্টি করে। আমি আশা করি এই মন্তব্যটি অন্যকে সহায়তা করতে পারে। +1
ম্যাচচিউ

12
find . -maxdepth 1 -type d

শুধু ফোল্ডার তালিকাবদ্ধ করবে। এবং টেডি যেহেতু ইঙ্গিত করেছে আপনার এটি সাব ডায়ারগুলিতে পুনরায় পুনর্বিবেচনা বন্ধ করতে ম্যাক্সডেপথ প্রয়োজন need


5
আপনি সম্ভবত চান -maxdepth 1
টেডি

6

ড্যানিয়েলের উত্তর সঠিক। যদিও এখানে কিছু দরকারী সংযোজন রয়েছে।

লুকানো ফোল্ডার (যেমন .git) তালিকা এড়ানোর জন্য , এটি ব্যবহার করে দেখুন:

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \)

এবং কিছু পরিবেশে আউটপুট শুরুতে ড্রেডড ডট স্ল্যাশ প্রতিস্থাপন করতেfind , এটি ব্যবহার করুন:

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \) | sed 's|^\./||g'

1

আপনি ls এর আউটপুটকে বিশ্লেষণের জন্য "ভাবা উচিত নয়" বা বলা হয়েছে। পেছনের যুক্তিটি হ'ল আউটপুটটি মানব-পঠনযোগ্য হওয়ার উদ্দেশ্যে করা হয়েছে এবং এটি যদি অবিচ্ছিন্নভাবে পার্স করা জটিল করে তুলতে পারে, যদি আমি মনে করি।

আপনি যদি এলএস না চান বা না খুঁজে পান তবে আপনি "[-d]" দিয়ে "*" ফিল্টার করার চেষ্টা করতে পারেন।

আমি ঠিক এটি করেছি, কোনও কারণে ls খুঁজে পেয়েছি এবং কাজ করছিল না (ফাঁকা জায়গা এবং বন্ধনীগুলির সাথে অনুমান করা ফাইলের নাম, যা আমি অনুমান করছিলাম বা অন্য কিছু যা আমি উপেক্ষা করছিলাম), তারপরে আমি কিছু করেছি

for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done

0

গ্লোব প্যাটার্ন নির্বাচনের ক্ষেত্রে আমাকে এখানে বিভ্রান্ত করে এমন কোনও বিষয়ের উপর জোর দেওয়ার জন্য; বলুন আপনার এই আছে:

$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03

8 directories, 8 files

সুতরাং, এখানে আপনি কেবল mydir*ডিরেক্টরি নির্বাচন করতে চান তা বলুন । মনে রাখবেন যে আপনি যদি টার্মিনেটিং স্ল্যাশ ছেড়ে দেন তবে ls -dফাইলগুলিও তালিকাভুক্ত করবেন:

$ ls -d testglob/mydir*   # also `ls -d -- testglob/mydir*`
testglob/mydir_00      testglob/mydir_01      testglob/mydir_02      testglob/mydir_03
testglob/mydir_00.txt  testglob/mydir_01.txt  testglob/mydir_02.txt  testglob/mydir_03.txt

... তবে, একটি সমাপ্তি স্ল্যাশ দিয়ে, তারপরে কেবল ডিরেক্টরিগুলি তালিকাভুক্ত করা হবে:

$ ls -d testglob/mydir*/   # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/  testglob/mydir_01/  testglob/mydir_02/  testglob/mydir_03/

0

printf "%s\n" */ directories PWD- এ সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে।

echo */ এছাড়াও কাজ করবে, তবে একটি দীর্ঘ এক লাইনে, যখন নাম শূন্যস্থান রয়েছে তখন আরও কঠিন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.