আমি কীভাবে একটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করতে পারি তবে তাদের ফোল্ডার বা সাবফিলগুলি নয়। অন্য কথায়: আমি কীভাবে কেবল ফাইলগুলি তালিকাভুক্ত করতে পারি?
আমি কীভাবে একটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করতে পারি তবে তাদের ফোল্ডার বা সাবফিলগুলি নয়। অন্য কথায়: আমি কীভাবে কেবল ফাইলগুলি তালিকাভুক্ত করতে পারি?
উত্তর:
ব্যবহার find
:
find . -maxdepth 1 -type f
-maxdepth 1
বিকল্পটি ব্যবহার নিশ্চিত করে যে আপনি কেবলমাত্র বর্তমান ডিরেক্টরিটি সন্ধান করবেন (বা যদি আপনি .
কিছু পথ, সেই ডিরেক্টরিটি প্রতিস্থাপন করেন )। আপনি যদি সেই সাব-ডাইরেক্টরিগুলিতে সমস্ত ফাইলের একটি পুনরাবৃত্ত তালিকা চান তবে কেবল সেই বিকল্পটি সরিয়ে দিন।
find
ম্যাক অন, না হয় -type
, না -maxdepth
বিকল্প আছে।
-type
এবং -maxdepth
নয় অপশন স্বাভাবিক অর্থে; বিএসডি find
(ওএস এক্সে ব্যবহৃত হিসাবে) তাদের প্রাথমিক বলে , এবং তাদের অবশ্যই ফাইলের নাম অপারেন্ড (গুলি) এর পরে আসতে হবে ( .
এই ক্ষেত্রে; নোট করুন, লিনাক্সের বিপরীতে বিএসডি সংস্করণে কমপক্ষে একটি স্পষ্ট ফাইলের নাম অপারেন্ড প্রয়োজন); এই উত্তরের কমান্ডটি অবশ্যই ম্যাকের জন্য কাজ করে।
find *.png -maxdepth 0 -type f
এড়াতে ./
আউটপুট ফাইলের নামের মধ্যে উপসর্গ; আরো উল্লেখ্য -maxdepth
এর 0
না 1
), যতদিন আপনার প্রয়োজন ফাইল হিসাবে নাম মধ্যে ক্রম অনুযায়ী । আপনি যদি ls
অন্যথায় আপনার জন্য কী করতে চান (বিভিন্ন আউটপুট ফর্ম্যাট / অর্ডারিং, লুকানো আইটেমগুলি অন্তর্ভুক্ত রয়েছে কিনা তার উপরে ইনলাইন নিয়ন্ত্রণ), [মাল্টি-] টাইপ ফিল্টারিংয়ের সাথে পরিপূরক, আমার উত্তর থেকে স্ক্রিপ্ট সাহায্য করতে পারে।
find * -maxdepth 0 -type f
( find . -maxdepth 1 -type f
উত্তর অ্যালেক্সহলের মন্তব্য থেকে প্রাপ্ত বিকল্প) উত্তরটির সাথে: অদৃশ্যভাবে find . ...
লুকানো আইটেমগুলি অন্তর্ভুক্ত থাকে ./
, এবং জিএনইউ find
(লিনাক্স) সহ আউটপুট ফাইলের নামগুলি অবশ্যই উপস্থাপিত করে , সাধারণত একটি অনিবদ্ধ তালিকা তৈরি করে। ডিফল্টরূপে গোপন আইটেমগুলি বাদ find * ...
দিয়ে শেলটি গ্লোববিংয়ের কাজটি চালিয়ে যাওয়ার কারণে (পরিবর্তিত হতে পারে shopt -s dotglob
), বর্ণমালা অনুসারে বাছাই করা ফাইলের নাম (উপসর্গ নয়) আউটপুট দেয়। উভয়ই পদ্ধতির মধ্যে ফাইলের প্রতিলিপি অন্তর্ভুক্ত নয় ; এটি করতে বিকল্পটি ব্যবহার করুন -L
।
carlpett এর find
ভিত্তিক উত্তর ( find . -maxdepth 1 -type f
) নীতিগতভাবে কাজ করে, কিন্তু ব্যবহার পুরোপুরি একই না ls
: আপনি একটি সম্ভাব্য পেতে পাঁচমিশালী ফাইলের নামের সব তালিকা প্রিফিক্স./
, এবং আপনি আবেদন করতে ক্ষমতা হারাতে ls
অনেক এর অপশন ;
এছাড়াও find
অবিচ্ছিন্নভাবে লুকানো আইটেমগুলিও খুঁজে পায় , যেখানে ls
'আচরণের উপস্থিতি -a
বা -A
বিকল্পগুলির উপস্থিতি বা অনুপস্থিতির উপর নির্ভর করে ।
প্রশ্নের একটি মন্তব্যে অ্যালেক্স হল প্রস্তাবিত একটি উন্নতি হ'ল শেল গ্লোব্বিং এর সাথে একত্রিত করা :find
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
অন্য অনেকগুলি বাছাই / আউটপুট-বিন্যাস বিকল্পগুলির অ্যাক্সেস নেই ।হ্যান্স রোগম্যানের ls
+ grep
উত্তরটি ব্যবহারিক, তবে আপনাকে দীর্ঘ ( -l
) আউটপুট ফর্ম্যাটটি ব্যবহার করে লক করে ।
এই সীমাবদ্ধতার আমি লিখেছি মোকাবেলার fls
( চ iltering ম উপযোগ) ,
ls
সরবরাহ করে ,f
ফাইলের d
জন্য, ডিরেক্টরিগুলির l
জন্য এবং সিমলিংকের পক্ষে ls
যুক্তিগুলির তালিকার আগে (চালানো fls --help
বা fls --man
আরও শিখতে) রেখে plaউদাহরণ:
fls f # list all files in current dir.
fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
সমর্থিত প্ল্যাটফর্মগুলি
দ্রষ্টব্য: আপনি নোড.জেএস ব্যবহার না করলেও, এর প্যাকেজ ম্যানেজার, npm
প্ল্যাটফর্ম জুড়ে কাজ করে এবং ইনস্টল করা সহজ; চেষ্টা করুন
curl -L https://git.io/n-install | bash
নোড.জেএস ইনস্টল করার সাথে সাথে নীচে ইনস্টল করুন:
[sudo] npm install fls -g
দ্রষ্টব্য :
আপনি sudo
কীভাবে Node.js / io.js ইনস্টল করেছেন এবং পরে আপনি অনুমতি পরিবর্তন করেছেন কিনা তার উপর নির্ভর করে ; যদি আপনি কোনও EACCES
ত্রুটি পান তবে আবার চেষ্টা করুন sudo
।
-g
নিশ্চিত করে বিশ্বব্যাপী ইনস্টলেশন এবং করা প্রয়োজন হয় fls
আপনার সিস্টেমের মধ্যে $PATH
।
bash
স্ক্রিপ্ট হিসাবে ডাউনলোড করুন fls
।chmod +x fls
।$PATH
, যেমন /usr/local/bin
(ম্যাকোস) বা /usr/bin
(লিনাক্স)।-1
(এক নম্বর); ls
প্রকৃতপক্ষে "বেয়ার" আউটপুট, অর্থাৎ কেবল ফাইলের নামেই ডিফল্ট থাকে তবে টার্মিনালে আউটপুট দেওয়ার সময় কলাম-ভিত্তিক লেআউট (প্রতি লাইনে একাধিক ফাইলের নাম) ব্যবহার করা হয়। প্রতি আউটপুট লাইনে একটি ফাইলের নাম পেতে (যা যা হয় dir /b
, যদি মেমোরি পরিবেশন করে), -1
বিকল্পটি ব্যবহার করুন , যা স্টিডআউট যখন কোনও টার্মিনালের সাথে সংযুক্ত থাকে না , যেমন পাইপ বা আউটপুট ফাইলে প্রেরণ করার সময় এটি অন্তর্ভুক্ত থাকে।
আমি ls
নমুনার জন্য বিকল্পগুলি ব্যবহার করতে পছন্দ করি :
-l
একটি দীর্ঘ তালিকা বিন্যাস ব্যবহার করুন-t
পরিবর্তনের সময় অনুসারে বাছাই করুন, নতুনতম-r
বাছাইয়ের সময় বিপরীত ক্রম-F
,--classify
প্রবেশের সূচক (* / => @ | এর মধ্যে একটি) যুক্ত করুন-h
,--human-readable
-l এবং -s সহ, 1K 234M 2G ইত্যাদি আকারের মুদ্রণ করুন ...
কিছু সময় --color
এবং অন্য সব। (দেখুন ls --help
)
এটি ফাইল, সিমলিংক, ডিভাইস, পাইপ, সকেট ইত্যাদি প্রদর্শন করবে
তাই
find /some/path -maxdepth 1 ! -type d
সহজেই তারিখ অনুসারে বাছাই করা যেতে পারে:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
বা
find /some/path -maxdepth 1 -type f
আকার অনুসারে বাছাই করা:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
লুকানো এন্ট্রি না দেখানোর জন্য, যেখানে কোনও বিন্দু দিয়ে নাম শুরু হয়, আপনি যুক্ত করতে পারেন ! -name '.*'
:
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
তারপরে
আপনি প্রতিস্থাপন করতে পারে /some/path
দ্বারা .
জন্য লিস্টে বর্তমান ডিরেক্টরী বা ..
জন্য পেরেন্ট ডাইরেক্টরি ।
আপনি এটির ls
সাথে grep
বা ব্যবহার করতে এবং egrep
এটি একটি উপন্যাস হিসাবে আপনার প্রোফাইলে রাখতে পারেন:
ls -l | egrep -v '^d'
ls -l | grep -v '^d'
ফাইলগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ -" | tr -s '' | কাট-ডি '' -ফ 9
ডিরেক্টরিগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ ডি" | tr -s '' | কাট-ডি '' -ফ 9
লিঙ্কগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ l" | tr -s '' | কাট-ডি '' -ফ 9
tr -s '' আউটপুটটিকে একটি স্থান-সীমিত ফাইলগুলিতে পরিণত করে কাট কমান্ডটি ডিলিমিটারটি একটি স্পেস বলে নবম ক্ষেত্রটি (সর্বদা ফাইলের নাম / ডিরেক্টরি নাম / লিঙ্কনাম) ফেরত দেয়।
আমি এই সব সময় ব্যবহার!
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
xargs
এটি কাজ করতে যোগ করা হয়েছে এবং অতিরিক্ত তথ্য ছাড়া কেবল ফাইল নাম প্রদর্শন করার -1
পরিবর্তে ব্যবহৃত হয়েছে used-l
ls
find -printf0 '...' | sort -z
কেবল কার্পেটের উত্তরে যুক্ত করা। ফাইলগুলির অনেক দরকারী দেখার জন্য, আপনি আউটপুটটি ls এ পাইপ করতে পারেন।
find . -maxdepth 1 -type f|ls -lt|less
আপনি যখন প্রচুর ফাইল ডাউনলোড করেন এবং সাম্প্রতিক ফাইলগুলির একটি অ-বিশৃঙ্খল সংস্করণ দেখতে চান তখন তালিকার বিন্যাসে সর্বাধিক পরিবর্তিত ফাইলগুলি দেখায় quite
ls
স্ট্যান্ডার্ড ইনপুট পড়েন না, তাই এটিতে কোনও পাইপ দেওয়া অকেজো ls
। মিস করেছেন xargs
?
find
এই উত্তরের আদেশটি সম্পূর্ণ উপেক্ষা করা হবে ; সামগ্রিক কমান্ডটি একই ls -lt | less
, যা কোনও ধরনের ফিল্টারিং করে না ।
find
আপনি করতে পারেন find . -maxdepth 1 -type f -ls
। এটি ম্যাক ওএসেও কাজ করে বলে মনে হচ্ছে, যদিও আমি বিশ্বাস করি -maxdepth
এবং -ls
সঠিকভাবে পোর্টেবল বিকল্প নয়।
"সন্ধান করুন '-ম্যাক্সডেপথ'" আমার পুরানো সংস্করণের বাশের সাথে কাজ করে না, তাই আমি ব্যবহার করি:
f এ $ (ls) এর জন্য; যদি [-f $ f] করুন; তারপরে প্রতিধ্বনি $ চ; ফাই সম্পন্ন
for f in $(ls)
দ্বিগুণ ভুল। আপনি for f in *
এটির সাথে এটি ঠিক করতে পারছিলেন তবে এটি ভঙ্গ হবে কারণ আপনি যুক্তিটি echo
সঠিকভাবে উদ্ধৃত করছেন না ।