উত্তর:
তুমি ব্যবহার করতে পার:
ls -d -- */
যেহেতু সমস্ত ডিরেক্টরি শেষ হয় /
, এটি কেবল বর্তমান পথের ডিরেক্টরিগুলি তালিকাভুক্ত করে। -D বিকল্প নিশ্চিত করে যে শুধুমাত্র ডিরেক্টরির নাম ছাপা হয়, তাদের বিষয়বস্তু।
ls -d -- */
এবং এর মধ্যে পার্থক্য কী ls -d */
?
--
প্রচলিতভাবে বিকল্পগুলির শেষ চিহ্নিত করতে ব্যবহৃত হয়, যাতে কোনও ফাইলের নামকরণ করা হয় তবে -l
ls এটি দীর্ঘ তালিকা বিন্যাসের বিকল্প হিসাবে ব্যাখ্যা করবে না।
স্টিফেন মার্টিনের প্রতিক্রিয়া একটি সতর্কতা দিয়েছে এবং বর্তমান ফোল্ডারটিও তালিকাভুক্ত করেছে, তাই আমি পরামর্শ দেব
find . -mindepth 1 -maxdepth 1 -type d
(এটি লিনাক্সে রয়েছে; আমি পসিক্স ম্যান পৃষ্ঠাতে -ম্যাক্সডেপথ এবং -মাইন্ডপথ খুঁজে পাইনি)
ls -d -- */
বিকল্পটি পছন্দ করি, যেমনটি find
লুকানো পরিচালকও পাওয়া যাবে। যা কখনও কখনও কাজে লাগতে পারে তবে মাঝে মাঝে ঝামেলাও সৃষ্টি করে। আমি আশা করি এই মন্তব্যটি অন্যকে সহায়তা করতে পারে। +1
ড্যানিয়েলের উত্তর সঠিক। যদিও এখানে কিছু দরকারী সংযোজন রয়েছে।
লুকানো ফোল্ডার (যেমন .git
) তালিকা এড়ানোর জন্য , এটি ব্যবহার করে দেখুন:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \)
এবং কিছু পরিবেশে আউটপুট শুরুতে ড্রেডড ডট স্ল্যাশ প্রতিস্থাপন করতেfind
, এটি ব্যবহার করুন:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) | sed 's|^\./||g'
আপনি ls এর আউটপুটকে বিশ্লেষণের জন্য "ভাবা উচিত নয়" বা বলা হয়েছে। পেছনের যুক্তিটি হ'ল আউটপুটটি মানব-পঠনযোগ্য হওয়ার উদ্দেশ্যে করা হয়েছে এবং এটি যদি অবিচ্ছিন্নভাবে পার্স করা জটিল করে তুলতে পারে, যদি আমি মনে করি।
আপনি যদি এলএস না চান বা না খুঁজে পান তবে আপনি "[-d]" দিয়ে "*" ফিল্টার করার চেষ্টা করতে পারেন।
আমি ঠিক এটি করেছি, কোনও কারণে ls খুঁজে পেয়েছি এবং কাজ করছিল না (ফাঁকা জায়গা এবং বন্ধনীগুলির সাথে অনুমান করা ফাইলের নাম, যা আমি অনুমান করছিলাম বা অন্য কিছু যা আমি উপেক্ষা করছিলাম), তারপরে আমি কিছু করেছি
for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done
গ্লোব প্যাটার্ন নির্বাচনের ক্ষেত্রে আমাকে এখানে বিভ্রান্ত করে এমন কোনও বিষয়ের উপর জোর দেওয়ার জন্য; বলুন আপনার এই আছে:
$ 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/
printf "%s\n" */
directories PWD- এ সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে।
echo */
এছাড়াও কাজ করবে, তবে একটি দীর্ঘ এক লাইনে, যখন নাম শূন্যস্থান রয়েছে তখন আরও কঠিন।
আপনি এটি ব্যবহার করতে পারেন:
du
বা:
git ls-tree -d -r --name-only @