বাশে ls ব্যবহার করে কেবল ডিরেক্টরিগুলি তালিকাভুক্ত করবেন?


952

এই কমান্ডটি বর্তমান পথে ডিরেক্টরিগুলি তালিকা করে: ls -d */

প্যাটার্নটি ঠিক কী করে */?

এবং কীভাবে আমরা উপরের কমান্ডের নিখুঁত পাথটি দিতে পারি (উদাহরণস্বরূপ ls -d /home/alice/Documents) সেই পাথটিতে কেবল ডিরেক্টরি তালিকা তৈরি করার জন্য?


7
এই উত্তরটির সম্পাদনা দেখুন unix.stackexchange.com/a/75047/32647-d আসলে কী বোঝায় তা ব্যাখ্যা করে ।
এভেজেনি সার্জিভ

উত্তর:


989

*/এমন একটি প্যাটার্ন যা বর্তমান ডিরেক্টরিতে সমস্ত উপ-ডিরেক্টরিগুলির *সাথে মেলে ( সমস্ত ফাইল এবং উপ- ডিরেক্টরিগুলির সাথে মিলবে ; /এটি ডিরেক্টরিতে সীমাবদ্ধ করে)। একইভাবে, / হোম / এলিস / নথির অধীনে সমস্ত সাব-ডিরেক্টরিকে তালিকাবদ্ধ করতে, ব্যবহার করুনls -d /home/alice/Documents/*/


87
নোট করুন যে */কোনও লুকানো ফোল্ডার মেলে না। এগুলি অন্তর্ভুক্ত করতে হয় হয় তাদের স্পষ্টভাবে নির্দিষ্ট করে নির্দিষ্ট করুন ls -d .*/ */বা বাশে বিকল্পটি সেট করুনdotglob
গার্জি

1
@ytpillai এটি ঘটছে কারণ এখানে তালিকার কোনও উপ-ডিরেক্টরি নেই। আপনি lsঅস্তিত্ব নেই এমন কোনও কিছুর জন্য আপনি যে কোনও সময় ব্যবহার করলে ত্রুটিটি পান ।
গর্ডন ডেভিসন

1
ঠিক আছে ধন্যবাদ, আমি এখনই এটির জন্য পরীক্ষা করেছি এবং দেখা যাচ্ছে যে একমাত্র ডিরেক্টরিটি মূল ফোল্ডার।
ytpillai

1
@ গর্ডন ডেভিসন ব্যর্থ বিকল্পটির মাধ্যমে ব্যর্থতার বার্তা এড়ানো যেতে পারেshopt -s nullglob

4
@ বাইনারিজেব্রা সেট করা নলগ্লোব ত্রুটি বার্তা এড়াতে পারে, তবে আরও বিভ্রান্তির কারণ হতে পারে: নাল্লগ্লাব সেট এবং কোনও উপ-ডিরেক্টরি সহ, ls */কেবলমাত্র প্রসারিত হবে ls, যা বর্তমান ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করবে। আমি নিশ্চিত যে সে ক্ষেত্রে আপনি যা চান তা তা নয়।
গর্ডন ডেভিসন

481

এটি করার চারটি উপায়, প্রতিটি আলাদা আউটপুট ফর্ম্যাট সহ

1. ব্যবহার echo

উদাহরণ: echo */, echo */*/
এখানে আমি যা পেয়েছিলাম হল:

cs/ draft/ files/ hacks/ masters/ static/  
cs/code/ files/images/ static/images/ static/stylesheets/  

2. lsশুধুমাত্র ব্যবহার

উদাহরণ: ls -d */
আমি যা পেয়েছিলাম ঠিক তা এখানে:

cs/     files/      masters/  
draft/  hacks/      static/  

অথবা তালিকা হিসাবে (বিস্তারিত তথ্য সহ): ls -dl */

3. ব্যবহার lsএবংgrep

উদাহরণ: ls -l | grep "^d" আমি যা পেয়েছি তা এখানে:

drwxr-xr-x  24 h  staff     816 Jun  8 10:55 cs  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 draft  
drwxr-xr-x   9 h  staff     306 Jun  8 10:55 files  
drwxr-xr-x   2 h  staff      68 Jun  9 13:19 hacks  
drwxr-xr-x   6 h  staff     204 Jun  8 10:55 masters  
drwxr-xr-x   4 h  staff     136 Jun  8 10:55 static  

৪. বাশ স্ক্রিপ্ট (ফাঁকা ফাইল ফাইলের জন্য প্রস্তাবিত নয়)

উদাহরণ: for i in $(ls -d */); do echo ${i%%/}; done
আমি যা পেয়েছি তা এখানে:

cs  
draft  
files  
hacks  
masters  
static

আপনি যদি শেষের অক্ষর হিসাবে '/' রাখতে চান তবে আদেশটিটি হ'ল: for i in $(ls -d */); do echo ${i}; done

cs/  
draft/  
files/  
hacks/  
masters/  
static/

2
বিশেষ দ্রষ্টব্য। 3আমার জন্য অন্যদের তুলনায় লক্ষণীয়ভাবে ধীর ছিল। ডিরেক্টরিটিতে আমি পরীক্ষা করেছি: 1.012, 2.016, 3 .055 , 4.021 সে।
isomorphismes

@ আইসমোরফিসমিস, আপনি সময়টি কীভাবে মাপলেন? কিসে? যাইহোক, আমি বলতে হবে, না 1আমার প্রিয়।
অ্যালবার্ট

অ্যালবার্ট, আমি timeইউনিক্স ফাংশন ব্যবহার করেছি । /// আমি সম্মত, এর echo */চেয়ে চালাক ls -d */
isomorphismes

9
দুটি ছোট ছোট বিষয় যা আপনার লক্ষ্য করা উচিত। ls -l | গ্রেপ "^ d" ডিরেক্টরিতে প্রতীকী লিঙ্কগুলি ফিল্টার করে, যেখানে 'ls -d * /' এগুলি প্রদর্শন করে। এছাড়াও, 'ls -d * /' ব্যর্থ হয় যদি লক্ষ্য ডিরেক্টরিতে কোনও ডিরেক্টরি উপস্থিত না থাকে।
জোড়ান পাভলভিক

15
1.বিকল্প প্রধান যন্ত্রনা কারণ হবে যখন ফোল্ডার নাম যে শূণ্যস্থান আছে সঙ্গে তার আচরণ।
শ্রীকান্ত শরৎ

99

আমি ব্যবহার করি:

ls -d */ | cut -f1 -d'/'

এটি কোনও একক কলাম তৈরি করে যার পিছনে কোনও স্ল্যাশ নেই - স্ক্রিপ্টগুলিতে দরকারী।

আমার দুই সেন্ট.


18
এর -1জন্য বিকল্পটি lsএকক-কলাম বিন্যাসেও আউটপুট দেয় ls -1 -d */
কালিন

3
@ ব্যবহারকারী29020 নোট করা উচিত যে -1প্রতিটি প্রবেশের জন্য এখনও একটি পিছনে স্ল্যাশ আউটপুট দেয়।
ডেনিস

আমি যখন .bashrcএটিকে ওরফে হিসাবে যুক্ত করব তখন কীভাবে যুক্ত করব '/'?
আরএনএ

@ আরএনএ উত্তর দিতে দেরি করলেও ভবিষ্যতের লোকদের জন্য: ব্যাকস্ল্যাশ নিয়ে পালানোর চেষ্টা করবেন? '\/'
Caek

1
নেতৃস্থানীয় স্ল্যাশ থাকলে বিরতি। এটি কেবলমাত্র পিছনের স্ল্যাশগুলি সরিয়ে দেয়:| sed -e 's-/$--'
ভিক্টর সার্জিয়েনকো

62

সব ফোল্ডার জন্য ছাড়া সাবফোল্ডার:

find /home/alice/Documents -maxdepth 1 -type d

সব ফোল্ডার জন্য সঙ্গে সাবফোল্ডার:

find /home/alice/Documents -type d

2
প্রশ্নের সাথে মেলে (তবে ডটফাইলগুলি অন্তর্ভুক্ত করুন), প্রথমটি হওয়া উচিত: find /home/alice/Documents -maxdepth 1 -mindepth 1 -type dঅন্যথায় আপনি /home/alice/Documentsনিজেই অন্তর্ভুক্ত হন । ডিরেক্টরিতে -L
প্রতিলিঙ্কগুলি

এটি স্যানিস্ট সমাধানগুলির মতো বলে মনে হচ্ছে, যেহেতু অনুসন্ধানই হ'ল সেই সরঞ্জামটি যা আসলে এই কাজের জন্য তৈরি হয়েছিল। আপনি বর্তমান ফলাফলের জন্য প্রথম ফলাফলটি - ./ কে বাদ দিতে পারেন
গ্রেপ-

38

4 (আরও) নির্ভরযোগ্য বিকল্প।

একটি unquoted তারকাচিহ্ন *একটি প্যাটার্ন (উল্লিখিত glob) শেল দ্বারা হিসেবে ব্যাখ্যা করা হবে না।
শেল এটির নাম প্রসারিত করতে ব্যবহার করবে।
এরপরে এটি ফাইলের নামের একটি তালিকা তৈরি করবে যা প্যাটার্নের সাথে মেলে।
একটি সাধারণ তারকাচিহ্ন PWD (উপস্থিত ওয়ার্কিং ডিরেক্টরি) এর সমস্ত ফাইলের সাথে মেলে।
আরও জটিল প্যাটার্ন হিসাবে */শেষ হওয়া সমস্ত ফাইলের সাথে মেলে /
সুতরাং, সমস্ত ডিরেক্টরি। এই কারণেই আদেশ:

1.- প্রতিধ্বনি।

echo */
echo ./*/              ### avoid misinterpreting filenames like "-e dir"

echoপিডাব্লুডিতে সমস্ত ডিরেক্টরিতে (শেল দ্বারা) প্রসারিত হবে ।


এটি পরীক্ষা করার জন্য: mkdirটেস্ট-ডির মতো একটি ডিরেক্টরি ( ) তৈরি করুন cdএবং এটিতে:

mkdir test-dir; cd test-dir

কিছু ডিরেক্টরি তৈরি করুন:

mkdir {cs,files,masters,draft,static}   # safe directories.
mkdir {*,-,--,-v\ var,-h,-n,dir\ with\ spaces}  # some a bit less secure.
touch -- 'file with spaces' '-a' '-l' 'filename'    # and some files:

echo ./*/বিজোড় নামযুক্ত ফাইল সহ কমান্ডটি নির্ভরযোগ্য থাকবে:

./--/ ./-/ ./*/ ./cs/ ./dir with spaces/ ./draft/ ./files/ ./-h/
./masters/ ./-n/ ./static/ ./-v var/

ফাইল ফাইলের ফাঁকা স্থানগুলি পড়াকে কিছুটা বিভ্রান্ত করে তোলে।


এর পরিবর্তে echo, আমরা ব্যবহার করি ls, শেলটি ফাইলের তালিকার তালিকাকে প্রসারিত করছে still শেলটি পিডাব্লুডিতে ডিরেক্টরিগুলির একটি তালিকা পাওয়ার কারণ। -dবিকল্প lsকরে তোলে প্রতিটি ডিরেক্টরির বিষয়বস্তু (ডিফল্ট দ্বারা উপস্থাপিত) পরিবর্তে বর্তমান ডিরেক্টরির এন্ট্রি তালিকা।

ls -d */

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

2.- ls

জিএনইউ ls"বিকল্পগুলির শেষ" ( --) কীটি গ্রহণ করবে ।

ls -d ./*/                     ### more reliable BSD ls
ls -d -- */                    ### more reliable GNU ls

3.-printf,

প্রতিটি ডিরেক্টরিকে তার নিজস্ব লাইনে তালিকাভুক্ত করতে (এক কলামে, ls -1 এর সমান), ব্যবহার করুন:

$ printf "%s\n" */        ### Correct even with "-", spaces or newlines.

এবং, আরও ভাল, আমরা চলার স্থানটি সরিয়ে ফেলতে পারি /:

$ set -- */; printf "%s\n" "${@%/}"        ### Correct with spaces and newlines.

এর মতো একটি প্রচেষ্টা:

$ for i in $(ls -d */); do echo ${i%%/}; done

এতে ব্যর্থ হবে:

  • কিছু নাম ( ls -d */) ইতিমধ্যে উপরে প্রদর্শিত হিসাবে।
  • এর মান দ্বারা প্রভাবিত হবে IFS
  • স্থানগুলি এবং ট্যাবগুলিতে নামগুলি বিভক্ত করবে (ডিফল্ট সহ IFS)।
  • নামের প্রতিটি নিউলাইন একটি নতুন প্রতিধ্বনি কমান্ড শুরু করবে।

4.- ফাংশন

অবশেষে, কোনও ফাংশনের ভিতরে যুক্তি তালিকাটি ব্যবহার করা বর্তমান চলমান শেলের আর্গুমেন্ট তালিকার ক্ষতি করবে না। কেবল:

$ listdirs(){ set -- */; printf "%s\n" "${@%/}"; }
$ listdirs

এই তালিকা উপস্থাপন:

--
-
*
cs
dir with spaces
draft
files
-h
masters
-n
static
-v var

এই বিকল্পগুলি বেশ কয়েকটি ধরণের বিজোড় ফাইল নাম সহ নিরাপদ।


আমি মনে করি আপনার নিরাপদ শব্দটি নির্ভরযোগ্য সহ প্রতিস্থাপন করা উচিত। আপনার পোস্ট আমাকে কি মনে করে যে অন্যান্য সমাধানের হয় 'অনিরাপদ' করে তোলে (প্রবন বা নানারকম।)
Amado মার্টিনেজ

1
@ আমাদোমার্টিনেজ একটি সাধারণ / নিরাপদ / নির্ভরযোগ্য / সম্পন্ন করেছেন। উত্তম?

21

treeকমান্ড এখানে বেশ দরকারী। ডিফল্টরূপে এটি সমস্ত ফাইল এবং ডিরেক্টরিগুলি সম্পূর্ণ গভীরতায় দেখায়, কিছু অসি অক্ষর ডিরেক্টরি ট্রি দেখায়।

$ tree
.
├── config.dat
├── data
   ├── data1.bin
   ├── data2.inf
   └── sql
|      └── data3.sql
├── images
   ├── background.jpg
   ├── icon.gif
   └── logo.jpg
├── program.exe
└── readme.txt

তবে আমরা যদি অ্যাস্কি ট্রি ব্যতীত এবং বর্তমান ডিরেক্টরি থেকে সম্পূর্ণ পথ ধরে কেবল ডিরেক্টরিগুলি পেতে চাইতাম তবে আপনি এটি করতে পারেন:

$ tree -dfi
.
./data
./data/sql
./images

যুক্তি হচ্ছে:

-d     List directories only.
-f     Prints the full path prefix for each file.
-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

এবং যদি আপনি এরপরে পরম পথ চান, আপনি বর্তমান ডিরেক্টরিটির সম্পূর্ণ পথ নির্দিষ্ট করে শুরু করতে পারেন:

$ tree -dfi "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/data/sql
/home/alice/Documents/images

এবং উপ-ডিরেক্টরিগুলির সংখ্যা সীমাবদ্ধ করতে আপনি নিম্নোক্ত উপ-ডিরেক্টরিগুলির সর্বাধিক স্তর নির্ধারণ করতে পারেন -L level, উদাহরণস্বরূপ:

$ tree -dfi -L 1 "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/images

মানুষ গাছের সাথে আরও যুক্তি দেখা যায়


15

আপনি যদি ভাবছেন যে 'ls -d * /' থেকে আউটপুট আপনাকে দুটি ট্রেলিং স্ল্যাশ দেয় , যেমন:

[prompt]$ ls -d */    
app//  cgi-bin//  lib//        pub//

এটি সম্ভবত কারণ কোথাও আপনার শেল বা সেশন কনফিগারেশন ফাইলগুলি ওরফে ls কমান্ডের ls সংস্করণে কমান্ড দেয় যা -F পতাকা অন্তর্ভুক্ত করে। এই পতাকাটি প্রতিটি আউটপুট নামের সাথে একটি অক্ষর যুক্ত করে (এটি কোনও সরল ফাইল নয়) এটি কী ধরণের জিনিস তা নির্দেশ করে। সুতরাং একটি স্ল্যাশ হ'ল প্যাটার্ন '* /' এর সাথে মেলে এবং অন্য স্ল্যাশটি সংযুক্ত প্রকারের সূচক।

এই সমস্যা থেকে পরিত্রাণ পেতে, আপনি অবশ্যই ls এর জন্য পৃথক অন্য নামটি সংজ্ঞায়িত করতে পারেন। তবে সাময়িকভাবে উপনামটি না চাওয়ার জন্য আপনি ব্যাকস্ল্যাশ দিয়ে কমান্ডটি প্রেন্ডিং করতে পারেন:

\ এলএস -ডি * /


11

আমি কেবল এটি আমার .bashrcফাইলে যুক্ত করছি (আপনার কেবল প্রয়োজন হলে / একটি সেশনের জন্য এটি চাইলে আপনি কেবল কমান্ড লাইনেও এটি টাইপ করতে পারেন)

alias lsd='ls -ld */'

তাহলে এলএসডি পছন্দসই ফলাফল আনবে produce


আপনি কি শুধু ব্যবহার করতে পারবেন না? ls -l পাথ |
গ্রেপ

5
"তবে এলএসডি পছন্দসই ফলাফল আনবে।" আমি হাসি
fbafelip 21

1
আমার অভিজ্ঞতায় এটি একটি ফলাফল তৈরি করে।
টড

আমি 'ছেলে' ব্যবহার করি (সমস্ত ডিরেক্টরি তালিকাবদ্ধ করুন), এবং আমি লুকানো ডিরেক্টরিগুলিও অন্তর্ভুক্ত করতে '। * /' অন্তর্ভুক্ত করেছি। অবশ্যই, ইনসেন্টেন্ডো আমার উপরও হারায় না।
DryLabRebel

11

lsডিরেক্টরিগুলিতে সিমলিংক সহ আসল সমাধান

প্রকৃত সাব-ডাইরেক্টরি মিলের জন্য ওয়াইল্ডকার্ড ব্যবহার করার সময় এখানে অনেক উত্তর আসলে ব্যবহার করে না ls(বা কেবল এটির তুচ্ছ অর্থে ls -dব্যবহার করে A একটি সত্য lsসমাধান কার্যকর, কারণ এটি lsবাছাইয়ের ক্রম ইত্যাদির বিকল্পগুলির ব্যবহারের অনুমতি দেয় etc.

প্রতীক বাদ দিয়ে

ব্যবহারের জন্য একটি সমাধান lsদেওয়া হয়েছে, তবে এটি অন্যান্য সমাধানগুলির থেকে পৃথক কিছু করে যা এতে ডিরেক্টরিতে প্রতীককে বাদ দেয় :

ls -l | grep '^d'

(সম্ভবত ফাইলের নামগুলি পাইপ করা sedবা awkআলাদা করতে)

সিমলিংক সহ

(সম্ভবত আরও সাধারণ) ক্ষেত্রে ডিরেক্টরিতে প্রতিলিঙ্কগুলি অন্তর্ভুক্ত করা উচিত, আমরা এর -pবিকল্পটি ব্যবহার করতে পারি ls, যা এটি ডিরেক্টরিগুলির নামের সাথে স্ল্যাশ অক্ষর যুক্ত করে তোলে (প্রতিলিঙ্কযুক্তগুলি সহ):

ls -1p | grep '/$'

বা, পেছনের স্ল্যাশগুলি থেকে মুক্তি পাওয়া:

ls -1p | grep '/$' | sed 's/\/$//'

আমরা lsপ্রয়োজন মতো বিকল্পগুলি যুক্ত করতে পারি (যদি দীর্ঘ তালিকা ব্যবহার করা হয় -1তবে এর আর প্রয়োজন নেই)।

নোট: যদি আমরা চাই স্ল্যাশ trailing কিন্তু না তাদের দ্বারা হাইলাইট করতে চান grep, আমরা hackishly খালি লাইন প্রকৃত মেলা অংশ করে হাইলাইট নয় হাইলাইট সরাতে পারেন:

ls -1p | grep -P '(?=/$)'

9

যদি গোপন ডিরেক্টরিটি তালিকাভুক্ত করার প্রয়োজন না হয় তবে আমি প্রস্তাব দিই:

ls -l | grep "^d" | awk -F" " '{print $9}'  

এবং যদি লুকানো ডিরেক্টরিগুলি তালিকাভুক্ত করার প্রয়োজন হয়, ব্যবহার করুন:

ls -Al | grep "^d" | awk -F" " '{print $9}'

অথবা

find -maxdepth 1 -type d | awk -F"./" '{print $2}'

আপনার যদি আরও জানার প্রয়োজন হয় awkতবে দয়া করে এই উত্তরটি দেখুন
পিএইচপি লার্নার

অন্যান্য উত্তরের তুলনায় "এলএস .. | গ্রেপ ... | অ্যাজক" এর প্রথম বিকল্পটি অতিরিক্ত স্ক্রিপ্টিং বলে মনে হচ্ছে।
লার্স নর্ডিন

1
আপনি ধরে নিচ্ছেন কোনও ডিরেক্টরিতে তাদের নামের ভিতরে সাদা স্থান নেই।
বেনিয়ামিন আর

7

ছাড়াই ফোল্ডার তালিকা প্রদর্শন করতে /

ls -d */|sed 's|[/]||g'

2
বাls -d1 */ | tr -d "/"
সিসিপিজ্জা

বাহ্যিক কমান্ড কল করার দরকার নেই:set -- */; printf "%s\n" "${@%/}"

আমি @ হোল্যান্ডার সমাধানটি পছন্দ করি। আমার কিছুটা সংক্ষিপ্ত সমাধানটি (পরীক্ষিত ও কাজগুলি): ls -d * / | সেডস | / || জি '
ক্লোর

একটি এলএসডিআর ওরফে থাকাও দরকারী: ওরফে lsdirs = "ls -d * / | সেডস | / || জি '"
ক্লোর

6

আমি যা ব্যবহার করছি তা এখানে

ls -d1 /Directory/Path/*;


এটি লাইনে লাইনে প্রদর্শন করার জন্য এটি একটি দুর্দান্ত সমাধান।
নিকোলে ফ্রিক

এটি কেবল ডিরেক্টরিগুলি তালিকা করে না। আপনাকে অবশ্যই একটি ls -d1 /Directory/Path/*/
চলমান

6

শুধুমাত্র ডিরেক্টরি তালিকা করার জন্য :

ls -l | grep ^d

কেবলমাত্র ফাইল তালিকা করার জন্য :

ls -l | grep -v ^d 

বা এছাড়াও আপনি এটি করতে পারেন: ls -ld * /


4

আইটেমটি ডিরেক্টরি সহ এটি পরীক্ষা করুন test -d:

for i in $(ls); do test -d $i && echo $i ; done

1
এই কোডটি কী করে এবং কীভাবে এটি প্রশ্নের সাথে সম্পর্কিত তা দয়া করে ব্যাখ্যা করুন।
কেন ওয়াইএন

1
এটি তেহ কমান্ড 'এলএস' চালায় তারপর প্রতিটি ডিরেক্টরি হলে আউটপুট টেস্ট-ইন-এর মাধ্যমে লুপ হয় এবং যদি থাকে তবে প্রতিধ্বনিত হয় .. এটি কাজ করে তবে আরও ভাল উপায় রয়েছে
শুইলাস

3

*/ একটি ফাইলের সাথে মেলে এমন প্যাটার্ন যা বর্তমান ডিরেক্টরিতে ডিরেক্টরিগুলির সাথে মেলে।

কেবল ডিরেক্টরি তালিকা করতে, আমি এই ফাংশনটি পছন্দ করি:

# long list only directories
llod () { 
  ls -l --color=always "$@" | grep --color=never '^d'
}

এটি আপনার .bashrc এ রাখুন।

ব্যবহারের উদাহরণ:

llod       # long listing of all directories in current directory
llod -tr   # same but in chronological order oldest first
llod -d a* # limit to directories beginning with letter 'a'
llod -d .* # limit to hidden directories

দ্রষ্টব্য: আপনি -iবিকল্পটি ব্যবহার করলে এটি ভেঙে যাবে । এটির জন্য এখানে একটি স্থিরতা রয়েছে:

# long list only directories
llod () { 
  ls -l --color=always "$@" | egrep --color=never '^d|^[[:digit:]]+ d'
}

3

এফওয়াইআই, আপনি যদি সমস্ত ফাইলকে বহু-লাইনে মুদ্রণ করতে চান তবে আপনি এমন একটি করতে পারেন ls -1যা প্রতিটি ফাইলকে আলাদা লাইনে মুদ্রণ করবে will file1 file2 file3


3

বর্তমান ডিরেক্টরিটির একটি সরল তালিকা, এটি হ'ল:

ls -1d ./*/

আপনি এটি বাছাই এবং পরিষ্কার চান?

ls -1d ./*/ | cut -c 3- | rev | cut -c 2- | rev | sort

মনে রাখবেন: বড় আকারের অক্ষরগুলির সাজানোর ক্ষেত্রে আলাদা আচরণ থাকে


3

আর একবার চেষ্টা কর. এটি সমস্ত লিনাক্স ডিস্ট্রোসের জন্য কাজ করে।

ls -ltr | grep drw

4
ls -l | grep '^d' | awk '{print $9}'
dw1

2

কেবলমাত্র "এখানে" থেকে ডিরেক্টরি তালিকা করতে ওয়ান-লাইনার।

ফাইল গণনা সহ।

for i in `ls -d */`; do g=`find ./$i -type f -print| wc -l`; echo "Directory $i contains $g files."; done

2

আমি আংশিকভাবে এর সাথে সমাধান করেছি:

cd "/path/to/pricipal/folder"

for i in $(ls -d .*/); do sudo ln -s "$PWD"/${i%%/} /home/inukaze/${i%%/}; done

ln: «/home/inukaze/./.»: can't overwrite a directory
ln: «/home/inukaze/../..»: can't overwrite a directory
ln: accesing to «/home/inukaze/.config»: too much symbolics links levels
ln: accesing to «/home/inukaze/.disruptive»: too much symbolics links levels
ln: accesing to «/home/inukaze/innovations»: too much symbolics links levels
ln: accesing to «/home/inukaze/sarl»: too much symbolics links levels
ln: accesing to «/home/inukaze/.e_old»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gnome2_private»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gvfs»: too much symbolics links levels
ln: accesing to «/home/inukaze/.kde»: too much symbolics links levels
ln: accesing to «/home/inukaze/.local»: too much symbolics links levels
ln: accesing to «/home/inukaze/.xVideoServiceThief»: too much symbolics links levels

ঠিক আছে, এটি আমার হ্রাস করুন, মেয়র অংশ :)


2

এটিকে পুরো বৃত্ত হিসাবে যুক্ত করা, প্রতিটি ফোল্ডারের পথ পুনরুদ্ধার করতে, আলবার্টের উত্তরের পাশাপাশি গর্ডানসের সংমিশ্রণটি ব্যবহার করুন যা বেশ কার্যকর হওয়া উচিত।

for i in $(ls -d /pathto/parent/folder/*/); do echo ${i%%/}; done

আউটপুট:

/pathto/parent/folder/childfolder1/
/pathto/parent/folder/childfolder2/
/pathto/parent/folder/childfolder3/
/pathto/parent/folder/childfolder4/
/pathto/parent/folder/childfolder5/
/pathto/parent/folder/childfolder6/
/pathto/parent/folder/childfolder7/
/pathto/parent/folder/childfolder8/


1

আমি কেবল ডিরেক্টরি নাম তালিকার জন্য যা ব্যবহার করি তা এখানে:

ls -1d /some/folder/*/ | awk -F "/" "{print \$(NF-1)}"

1

মূল প্রশ্নের উত্তর দিতে, প্রতি সেটের */সাথে কিছু করার lsনেই; এটি শেল / বাশ দ্বারা সম্পন্ন হয়, গ্লোব্বিং নামে পরিচিত একটি প্রক্রিয়াতে ।

এই কারণ echo */এবং ls -d */একই উপাদান আউটপুট। ( -dপতাকাটি lsআউটপুটটিকে ডিরেক্টরিগুলির নাম না করে ডিরেক্টরিগুলির সামগ্রী করে তোলে ))


1

এখানে গাছ ব্যবহার করে একটি ভিন্নতা রয়েছে যা কেবলমাত্র পৃথক লাইনে ডিরেক্টরিগুলির নাম আউটপুট করে, হ্যাঁ এটি কুৎসিত তবে ওহে, এটি কাজ করে।

tree -d | grep -E '^[├|└]' | cut -d ' ' -f2

বা awk সহ

tree -d | grep -E '^[├|└]' | awk '{print $2}'

এটি সম্ভবত আরও ভাল এবং /ডিরেক্টরি নামটি ধরে রাখবে ।

ls -l | grep "^d" | awk '{print $9}'

এই কোরিয়ান মত দেখাচ্ছে!
পাসচালিস

0
file *|grep directory

ও / পি (আমার মেশিনে) -

[root@rhel6 ~]# file *|grep directory
mongo-example-master:    directory
nostarch:                directory
scriptzz:                directory
splunk:                  directory
testdir:                 directory

উপরের আউটপুট কেটে ব্যবহার করে আরও পরিমার্জন করা যায়।

file *|grep directory|cut -d':' -f1
mongo-example-master
nostarch
scriptzz
splunk
testdir

* could be replaced with any path that's permitted
 file - determine file type
 grep - searches for string named directory
 -d - to specify a field delimiter
 -f1 - denotes field 1

0

কেবলমাত্র ডিরেক্টরি তালিকা করার জন্য সর্বকালের স্বল্পতম কমান্ড (আসলে একটি হ্যাক)। আগ্রহের ডিরেক্টরিটির পরম পথে বা আপেক্ষিক পাথে টাইপ করুন এবং আগ্রহের ডিরেক্টরিতে প্রবেশ করতে enter টিপুন। এবার টাইপ করুন cdএবং ট্যাব কী টিপুন । এখন কেবল ডিরেক্টরিগুলি প্রদর্শিত হয়।

user@ubuntu:~/Desktop$cd <tab key>

উপরের কমান্ডটি এখন ডেস্কটপে কেবল ফোল্ডার প্রদর্শন করবে । সবচেয়ে সংক্ষিপ্ত।


এটি ধরে নিয়েছে যে স্বতঃপূরণ সক্ষম হয়েছে এবং এটি সব ক্ষেত্রেই কাজ না করে। এছাড়াও, আপনি যদি কিছু দিয়ে আউটপুটটি পাইপের মতো কিছু করতে চান তবে এটি কার্যকর হবে না। তবে কেবল আউটপুট দেখার জন্য, এটি দ্রুত এবং সহজে কাজ করে তা নিশ্চিত।
lacostenycoder

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