আমি কেবল নির্দিষ্ট পথে কেবল ডিরেক্টরিগুলির তালিকা তৈরি করতে চাই (এ ls
জাতীয় বিকল্প নেই)। এছাড়াও, এটি কি একটি একক লাইন কমান্ড দিয়ে করা যেতে পারে?
আমি কেবল নির্দিষ্ট পথে কেবল ডিরেক্টরিগুলির তালিকা তৈরি করতে চাই (এ ls
জাতীয় বিকল্প নেই)। এছাড়াও, এটি কি একটি একক লাইন কমান্ড দিয়ে করা যেতে পারে?
উত্তর:
ls -d */
বর্তমান ডিরেক্টরি ডিরেক্টরি ডিরেক্টরি তালিকাতে এটি চেষ্টা করুন
ls -al | grep '^d'
- এটি অনেক বেশি সংবেদনশীল।
*/
কেবলমাত্র ফরোয়ার্ড স্ল্যাশ দিয়ে শেষ হওয়া আইটেমগুলির প্রদর্শনকে বাধ্য করে, যা এই ক্ষেত্রে ডিরেক্টরি হিসাবে দেখাবে, এমনকি -F
বিকল্পের বিকল্প ls
ব্যবহার না করা সত্ত্বেও । এর আচরণের মতো ls *php
এবং এটি php
কোনও ডিরেক্টরিতে শেষ হওয়া সমস্ত ফাইলকে কীভাবে প্রদর্শন করে ।
echo */
খুব একই কাজ করতে হবে
এটা চেষ্টা কর:
find . -maxdepth 1 -type d
ls
সমাধানগুলির বিপরীতে , find
কাজটি করার জন্য পুরোপুরি দায়বদ্ধ (শেল ওয়াইল্ডকার্ড সম্প্রসারণের উপর নির্ভর করে না, যা সীমাবদ্ধতা আরোপ করতে পারে)। এটি আরও অনেক সংক্ষিপ্ত।
find * -maxdepth 0 -type d
।
find
পারে যা সাধারণত হয় তবে কেবল ফোল্ডারগুলি গভীরতা 1 এ আউটপুট দেয়
পরবর্তী
find * -maxdepth 0 -type d
মূলত '*' এর প্রসারণ ফিল্টার করে, অর্থাৎ বর্তমান দির সমস্ত প্রবেশিকা -type d
শর্ত অনুসারে।
সুবিধা হ'ল আউটপুট একই রকম ls -1 *
, তবে কেবল ডিরেক্টরি এবং এন্ট্রিগুলি ডট দিয়ে শুরু হয় না
আপনি ব্যবহার করতে পারেন ls -d */
বাtree -d
আর একটি সমাধান গ্লোববিং হবে তবে এটি আপনার ব্যবহার করা শেলের উপর নির্ভর করে এবং যদি ডিরেক্টরিগুলির জন্য গ্লোববিং সমর্থন করে।
উদাহরণস্বরূপ জেডএসএইচ:
zsh # ls *(/)
tree
?
tree
এটি ডিফল্টরূপে ইনস্টল করা হয়নি (যদিও এটি সারণীতে রয়েছে)।
tree
কমান্ডটি কোনও দেশীয় ইউনিক্স কমান্ড নয় (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন)।
যেহেতু এটি করার কয়েক ডজন উপায় রয়েছে, তাই এখানে অন্যটি রয়েছে:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
আপনি একটি উপনাম তৈরি করতে এবং এটি প্রোফাইল ফাইলে রাখতে পারেন
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
ডিরেক্টরি তালিকা পেতে এটি ব্যবহার করুন
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
আপনি যদি উপ-ডিরেক্টরিতে পুনরাবৃত্তি করতে না চান, আপনি পরিবর্তে এটি করতে পারেন:
find specifiedpath -type d -mindepth 1 -maxdepth 1
নোট করুন যে "ডট" ডিরেক্টরিগুলি (যার নাম দিয়ে শুরু .
হবে) খুব তালিকাভুক্ত হবে; কিন্তু বিশেষ ডিরেক্টরি .
না ..
। আপনি যদি "ডট" ডিরেক্টরিগুলি না চান তবে আপনি কেবল grep
সেগুলি আউট করতে পারেন :
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepth
পরিত্রাণ পেতে .
! 😁
উত্তরটি আপনার শেলের উপর নির্ভর করবে ।
ইন zsh
, উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলি করতে পারেন:
echo *(/)
এবং বর্তমান ওয়ার্কিং ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরি প্রদর্শিত হবে।
দেখুন man zshexpn
আরও তথ্যের জন্য।
একটি বিকল্প পদ্ধতির ব্যবহার find(1)
হ'ল, যা বেশিরভাগ ইউনিক্স স্বাদে কাজ করা উচিত:
find . -maxdepth 1 -type d -print
find(1)
অনেক ব্যবহার আছে, তাই আমি অবশ্যই সুপারিশ করব man find
।
এটি সম্পাদন করার জন্য আপনি tree
কমান্ডটি এর d
স্যুইচ দিয়ে ব্যবহার করতে পারেন ।
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
দেখতে man tree
আরও তথ্যের জন্য।
tree
। ওহ ভাল, কারো বজ্র চুরি করার আমার উদ্দেশ্য ছিল না?
আমার যদি এই ডিরেক্টরিটি থাকে:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
সমস্ত ডিরেক্টরি পেতে, লিঙ্কগুলি সমাধান করতে -L ব্যবহার করুন:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
-ল ছাড়া:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
কনফ_নাগিও ডিরেক্টরি অনুপস্থিত।
এটি আমার পক্ষে কাজ করে চলেছে:
`ls -F | grep /`
(তবে, আমি echo */
@ নোস দ্বারা উল্লিখিত হিসাবে স্যুইচ করছি )
এখানে আরও একটি সমাধান যা লিঙ্কযুক্ত ডিরেক্টরিগুলি দেখায়। আমি সামান্য এটি পছন্দ করি কারণ এটি "সাধারণ" এলএস-এল আউটপুটটির একটি উপসেট:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
ব্যাশে:
ls -d */
সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে
ls -ld */
দীর্ঘ ফর্ম সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে
ls -ld */ .*/
দীর্ঘ আকারে লুকানো ডিরেক্টরি সহ সমস্ত ডিরেক্টরি তালিকাভুক্ত করবে।
আমি সম্প্রতি zsh (MacOS কাতালিনা) এ চলেছি এবং এটি পেয়েছি:
ls -ld */ .*/
যদি বর্তমান ডিরেক্টরিটিতে কোনও গোপন ডিরেক্টরি না থাকে তবে আর কাজ করে না।
zsh: no matches found: .*/
এটি উপরের ত্রুটিটি মুদ্রণ করবে তবে কোনও ডিরেক্টরি মুদ্রণ করতে ব্যর্থ হবে।
ls -ld *(/) .*(/)
একইভাবে ব্যর্থ হয়।
আমি এখনও এটি খুঁজে পেয়েছি যে:
ls -ld */;ls -ld .*/
একটি শালীন কাজ। ;
কমান্ড বিভাজক হয়। তবে এর অর্থ হ'ল যদি কোনও লুকানো ডিরেক্টরি নেই, তবে এটি ডিরেক্টরিগুলি তালিকাভুক্ত করবে এবং কোনও গোপন ডিরেক্টরিগুলির জন্য ত্রুটিটি মুদ্রণ করবে:
foo
bar
zsh: no matches found: .*/
ls
আপনি কি লংগফোর্ডে তালিকাবদ্ধ
-l
করতে চান তা নির্দিষ্ট ডিরেক্টরিগুলির তালিকার শেল কমান্ডটি হ'ল (লাইন প্রতি এক আইটেম + অন্যান্য শীতল তথ্যের একগুচ্ছ)
-d
সমস্ত ডিরেক্টরিকে "ফাইল হিসাবে" তালিকাভুক্ত করার পতাকা এবং এটি পুনরাবৃত্তি
*/
নয় আর্গুমেন্ট 'স্ল্যাশে শেষ হওয়া সমস্ত ফাইলের তালিকা তৈরি করা'
*
"কোনও কিছুর" জন্য একটি সহজ রেগেক্স কমান্ড, সুতরাং শেলটিকে "" */
/ '"এ শেষ হওয়া কোনও কিছু তালিকা করতে জিজ্ঞাসা করছে
দেখুন man ls
আরও তথ্যের জন্য।
আমি এটি রেখেছি:
alias lad="ls -ld */;ls -ld .*/"
আমার .zshrc এ, এবং এটি ঠিকঠাক কাজ করে বলে মনে হচ্ছে।
দ্রষ্টব্য: আমি এটিও আবিষ্কার করেছি
ls -ld .*/ 2> /dev/null
এটি টার্মিনালে স্টেরার প্রিন্ট করার কারণে এটি কাজ করে না। আমি / আমার সমাধান আপডেট হলে আমি উত্তর আপডেট করব।
ডিরেক্টরি দীর্ঘ তালিকা
ডিরেক্টরি তালিকা
- ls -d * /