আমি কীভাবে একটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করতে পারি তবে তাদের ফোল্ডার বা সাবফিলগুলি নয়। অন্য কথায়: আমি কীভাবে কেবল ফাইলগুলি তালিকাভুক্ত করতে পারি?
আমি কীভাবে একটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করতে পারি তবে তাদের ফোল্ডার বা সাবফিলগুলি নয়। অন্য কথায়: আমি কীভাবে কেবল ফাইলগুলি তালিকাভুক্ত করতে পারি?
উত্তর:
ব্যবহার 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-lls
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সঠিকভাবে উদ্ধৃত করছেন না ।