উত্তর:
*/
এমন একটি প্যাটার্ন যা বর্তমান ডিরেক্টরিতে সমস্ত উপ-ডিরেক্টরিগুলির *
সাথে মেলে ( সমস্ত ফাইল এবং উপ- ডিরেক্টরিগুলির সাথে মিলবে ; /
এটি ডিরেক্টরিতে সীমাবদ্ধ করে)। একইভাবে, / হোম / এলিস / নথির অধীনে সমস্ত সাব-ডিরেক্টরিকে তালিকাবদ্ধ করতে, ব্যবহার করুনls -d /home/alice/Documents/*/
*/
কোনও লুকানো ফোল্ডার মেলে না। এগুলি অন্তর্ভুক্ত করতে হয় হয় তাদের স্পষ্টভাবে নির্দিষ্ট করে নির্দিষ্ট করুন ls -d .*/ */
বা বাশে বিকল্পটি সেট করুনdotglob
।
ls
অস্তিত্ব নেই এমন কোনও কিছুর জন্য আপনি যে কোনও সময় ব্যবহার করলে ত্রুটিটি পান ।
ls */
কেবলমাত্র প্রসারিত হবে ls
, যা বর্তমান ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করবে। আমি নিশ্চিত যে সে ক্ষেত্রে আপনি যা চান তা তা নয়।
echo
উদাহরণ: echo */
, echo */*/
এখানে আমি যা পেয়েছিলাম হল:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
ls
শুধুমাত্র ব্যবহারউদাহরণ: ls -d */
আমি যা পেয়েছিলাম ঠিক তা এখানে:
cs/ files/ masters/
draft/ hacks/ static/
অথবা তালিকা হিসাবে (বিস্তারিত তথ্য সহ): ls -dl */
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/
3
আমার জন্য অন্যদের তুলনায় লক্ষণীয়ভাবে ধীর ছিল। ডিরেক্টরিটিতে আমি পরীক্ষা করেছি: 1
.012, 2
.016, 3
.055 , 4
.021 সে।
1
আমার প্রিয়।
time
ইউনিক্স ফাংশন ব্যবহার করেছি । /// আমি সম্মত, এর echo */
চেয়ে চালাক ls -d */
।
1.
বিকল্প প্রধান যন্ত্রনা কারণ হবে যখন ফোল্ডার নাম যে শূণ্যস্থান আছে সঙ্গে তার আচরণ।
আমি ব্যবহার করি:
ls -d */ | cut -f1 -d'/'
এটি কোনও একক কলাম তৈরি করে যার পিছনে কোনও স্ল্যাশ নেই - স্ক্রিপ্টগুলিতে দরকারী।
আমার দুই সেন্ট.
-1
জন্য বিকল্পটি ls
একক-কলাম বিন্যাসেও আউটপুট দেয় ls -1 -d */
।
-1
প্রতিটি প্রবেশের জন্য এখনও একটি পিছনে স্ল্যাশ আউটপুট দেয়।
.bashrc
এটিকে ওরফে হিসাবে যুক্ত করব তখন কীভাবে যুক্ত করব '/'
?
'\/'
| sed -e 's-/$--'
সব ফোল্ডার জন্য ছাড়া সাবফোল্ডার:
find /home/alice/Documents -maxdepth 1 -type d
সব ফোল্ডার জন্য সঙ্গে সাবফোল্ডার:
find /home/alice/Documents -type d
find /home/alice/Documents -maxdepth 1 -mindepth 1 -type d
অন্যথায় আপনি /home/alice/Documents
নিজেই অন্তর্ভুক্ত হন । ডিরেক্টরিতে -L
একটি unquoted তারকাচিহ্ন *
একটি প্যাটার্ন (উল্লিখিত glob) শেল দ্বারা হিসেবে ব্যাখ্যা করা হবে না।
শেল এটির নাম প্রসারিত করতে ব্যবহার করবে।
এরপরে এটি ফাইলের নামের একটি তালিকা তৈরি করবে যা প্যাটার্নের সাথে মেলে।
একটি সাধারণ তারকাচিহ্ন PWD (উপস্থিত ওয়ার্কিং ডিরেক্টরি) এর সমস্ত ফাইলের সাথে মেলে।
আরও জটিল প্যাটার্ন হিসাবে */
শেষ হওয়া সমস্ত ফাইলের সাথে মেলে /
।
সুতরাং, সমস্ত ডিরেক্টরি। এই কারণেই আদেশ:
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 */
তবে এই আদেশটি (কিছুটা) কম নির্ভরযোগ্য। এটি উপরে তালিকাবদ্ধ বিজোড় নামযুক্ত ফাইলগুলির সাথে ব্যর্থ হবে। এটি বেশ কয়েকটি নাম দিয়ে শ্বাসরোধ করবে। সমস্যাগুলির সাথে এটি না পাওয়া পর্যন্ত আপনাকে একে একে মুছে ফেলতে হবে।
জিএনইউ ls
"বিকল্পগুলির শেষ" ( --
) কীটি গ্রহণ করবে ।
ls -d ./*/ ### more reliable BSD ls
ls -d -- */ ### more reliable GNU ls
প্রতিটি ডিরেক্টরিকে তার নিজস্ব লাইনে তালিকাভুক্ত করতে (এক কলামে, 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
)।অবশেষে, কোনও ফাংশনের ভিতরে যুক্তি তালিকাটি ব্যবহার করা বর্তমান চলমান শেলের আর্গুমেন্ট তালিকার ক্ষতি করবে না। কেবল:
$ listdirs(){ set -- */; printf "%s\n" "${@%/}"; }
$ listdirs
এই তালিকা উপস্থাপন:
--
-
*
cs
dir with spaces
draft
files
-h
masters
-n
static
-v var
এই বিকল্পগুলি বেশ কয়েকটি ধরণের বিজোড় ফাইল নাম সহ নিরাপদ।
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
মানুষ গাছের সাথে আরও যুক্তি দেখা যায়
আপনি যদি ভাবছেন যে 'ls -d * /' থেকে আউটপুট আপনাকে দুটি ট্রেলিং স্ল্যাশ দেয় , যেমন:
[prompt]$ ls -d */
app// cgi-bin// lib// pub//
এটি সম্ভবত কারণ কোথাও আপনার শেল বা সেশন কনফিগারেশন ফাইলগুলি ওরফে ls কমান্ডের ls সংস্করণে কমান্ড দেয় যা -F পতাকা অন্তর্ভুক্ত করে। এই পতাকাটি প্রতিটি আউটপুট নামের সাথে একটি অক্ষর যুক্ত করে (এটি কোনও সরল ফাইল নয়) এটি কী ধরণের জিনিস তা নির্দেশ করে। সুতরাং একটি স্ল্যাশ হ'ল প্যাটার্ন '* /' এর সাথে মেলে এবং অন্য স্ল্যাশটি সংযুক্ত প্রকারের সূচক।
এই সমস্যা থেকে পরিত্রাণ পেতে, আপনি অবশ্যই ls এর জন্য পৃথক অন্য নামটি সংজ্ঞায়িত করতে পারেন। তবে সাময়িকভাবে উপনামটি না চাওয়ার জন্য আপনি ব্যাকস্ল্যাশ দিয়ে কমান্ডটি প্রেন্ডিং করতে পারেন:
\ এলএস -ডি * /
আমি কেবল এটি আমার .bashrc
ফাইলে যুক্ত করছি (আপনার কেবল প্রয়োজন হলে / একটি সেশনের জন্য এটি চাইলে আপনি কেবল কমান্ড লাইনেও এটি টাইপ করতে পারেন)
alias lsd='ls -ld */'
তাহলে এলএসডি পছন্দসই ফলাফল আনবে produce
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 '(?=/$)'
যদি গোপন ডিরেক্টরিটি তালিকাভুক্ত করার প্রয়োজন না হয় তবে আমি প্রস্তাব দিই:
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
তবে দয়া করে এই উত্তরটি দেখুন
ছাড়াই ফোল্ডার তালিকা প্রদর্শন করতে /
ls -d */|sed 's|[/]||g'
ls -d1 */ | tr -d "/"
আমি যা ব্যবহার করছি তা এখানে
ls -d1 /Directory/Path/*;
ls -d1 /Directory/Path/*/
শুধুমাত্র ডিরেক্টরি তালিকা করার জন্য :
ls -l | grep ^d
কেবলমাত্র ফাইল তালিকা করার জন্য :
ls -l | grep -v ^d
বা এছাড়াও আপনি এটি করতে পারেন: ls -ld * /
আইটেমটি ডিরেক্টরি সহ এটি পরীক্ষা করুন test -d
:
for i in $(ls); do test -d $i && echo $i ; done
*/
একটি ফাইলের সাথে মেলে এমন প্যাটার্ন যা বর্তমান ডিরেক্টরিতে ডিরেক্টরিগুলির সাথে মেলে।
কেবল ডিরেক্টরি তালিকা করতে, আমি এই ফাংশনটি পছন্দ করি:
# 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'
}
এফওয়াইআই, আপনি যদি সমস্ত ফাইলকে বহু-লাইনে মুদ্রণ করতে চান তবে আপনি এমন একটি করতে পারেন ls -1
যা প্রতিটি ফাইলকে আলাদা লাইনে মুদ্রণ করবে will file1 file2 file3
আমি আংশিকভাবে এর সাথে সমাধান করেছি:
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
ঠিক আছে, এটি আমার হ্রাস করুন, মেয়র অংশ :)
এটিকে পুরো বৃত্ত হিসাবে যুক্ত করা, প্রতিটি ফোল্ডারের পথ পুনরুদ্ধার করতে, আলবার্টের উত্তরের পাশাপাশি গর্ডানসের সংমিশ্রণটি ব্যবহার করুন যা বেশ কার্যকর হওয়া উচিত।
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/
পার্ল ব্যবহার:
ls | perl -nle 'print if -d;'
আমি কেবল ডিরেক্টরি নাম তালিকার জন্য যা ব্যবহার করি তা এখানে:
ls -1d /some/folder/*/ | awk -F "/" "{print \$(NF-1)}"
এখানে গাছ ব্যবহার করে একটি ভিন্নতা রয়েছে যা কেবলমাত্র পৃথক লাইনে ডিরেক্টরিগুলির নাম আউটপুট করে, হ্যাঁ এটি কুৎসিত তবে ওহে, এটি কাজ করে।
tree -d | grep -E '^[├|└]' | cut -d ' ' -f2
বা awk সহ
tree -d | grep -E '^[├|└]' | awk '{print $2}'
এটি সম্ভবত আরও ভাল এবং /
ডিরেক্টরি নামটি ধরে রাখবে ।
ls -l | grep "^d" | awk '{print $9}'
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
কেবলমাত্র ডিরেক্টরি তালিকা করার জন্য সর্বকালের স্বল্পতম কমান্ড (আসলে একটি হ্যাক)। আগ্রহের ডিরেক্টরিটির পরম পথে বা আপেক্ষিক পাথে টাইপ করুন এবং আগ্রহের ডিরেক্টরিতে প্রবেশ করতে enter টিপুন। এবার টাইপ করুন cd
এবং ট্যাব কী টিপুন । এখন কেবল ডিরেক্টরিগুলি প্রদর্শিত হয়।
user@ubuntu:~/Desktop$cd <tab key>
উপরের কমান্ডটি এখন ডেস্কটপে কেবল ফোল্ডার প্রদর্শন করবে । সবচেয়ে সংক্ষিপ্ত।
-d
আসলে কী বোঝায় তা ব্যাখ্যা করে ।