একটি ডিরেক্টরি বাশের ডিরেক্টরি নয় কেবল ফাইলগুলি কীভাবে তালিকাভুক্ত করা যায়?


87

আমি কীভাবে একটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করতে পারি তবে তাদের ফোল্ডার বা সাবফিলগুলি নয়। অন্য কথায়: আমি কীভাবে কেবল ফাইলগুলি তালিকাভুক্ত করতে পারি?




প্রস্তাবিত সদৃশগুলির কোনওটিই ডিরেক্টরি বাদ দেওয়ার প্রয়োজনীয়তা বাস্তবায়ন করে না বলে মনে হয়।
ট্রিপলি

উত্তর:


118

ব্যবহার find:

find . -maxdepth 1 -type f

-maxdepth 1বিকল্পটি ব্যবহার নিশ্চিত করে যে আপনি কেবলমাত্র বর্তমান ডিরেক্টরিটি সন্ধান করবেন (বা যদি আপনি .কিছু পথ, সেই ডিরেক্টরিটি প্রতিস্থাপন করেন )। আপনি যদি সেই সাব-ডাইরেক্টরিগুলিতে সমস্ত ফাইলের একটি পুনরাবৃত্ত তালিকা চান তবে কেবল সেই বিকল্পটি সরিয়ে দিন।


এমকিলেটমেন্টের জবাব সম্পর্কে আমার মন্তব্যের পরে, আমি বুঝতে পেরেছি যে "সন্ধান করুন। </ ma.dng -maxdepth 1 -type f> pngs.txt" সম্ভবত এটি সম্পাদন করবে। এটা করে. কোনও স্ক্রিপ্ট ইনস্টল না করে।
অ্যালেক্স হল

4
findম্যাক অন, না হয় -type, না -maxdepthবিকল্প আছে।
টিমোফি

4
@Tim: -typeএবং -maxdepthনয় অপশন স্বাভাবিক অর্থে; বিএসডি find(ওএস এক্সে ব্যবহৃত হিসাবে) তাদের প্রাথমিক বলে , এবং তাদের অবশ্যই ফাইলের নাম অপারেন্ড (গুলি) এর পরে আসতে হবে ( .এই ক্ষেত্রে; নোট করুন, লিনাক্সের বিপরীতে বিএসডি সংস্করণে কমপক্ষে একটি স্পষ্ট ফাইলের নাম অপারেন্ড প্রয়োজন); এই উত্তরের কমান্ডটি অবশ্যই ম্যাকের জন্য কাজ করে।
mklement0

4
@AlexHall: এটা একটা চালাক সমাধান (যদিও আমি আপনাকে পরামর্শ দিচ্ছি find *.png -maxdepth 0 -type fএড়াতে ./আউটপুট ফাইলের নামের মধ্যে উপসর্গ; আরো উল্লেখ্য -maxdepthএর 0না 1), যতদিন আপনার প্রয়োজন ফাইল হিসাবে নাম মধ্যে ক্রম অনুযায়ী । আপনি যদি lsঅন্যথায় আপনার জন্য কী করতে চান (বিভিন্ন আউটপুট ফর্ম্যাট / অর্ডারিং, লুকানো আইটেমগুলি অন্তর্ভুক্ত রয়েছে কিনা তার উপরে ইনলাইন নিয়ন্ত্রণ), [মাল্টি-] টাইপ ফিল্টারিংয়ের সাথে পরিপূরক, আমার উত্তর থেকে স্ক্রিপ্ট সাহায্য করতে পারে।
mklement0

4
বিপরীতে find * -maxdepth 0 -type f( find . -maxdepth 1 -type fউত্তর অ্যালেক্সহলের মন্তব্য থেকে প্রাপ্ত বিকল্প) উত্তরটির সাথে: অদৃশ্যভাবে find . ...লুকানো আইটেমগুলি অন্তর্ভুক্ত থাকে ./, এবং জিএনইউ find(লিনাক্স) সহ আউটপুট ফাইলের নামগুলি অবশ্যই উপস্থাপিত করে , সাধারণত একটি অনিবদ্ধ তালিকা তৈরি করে। ডিফল্টরূপে গোপন আইটেমগুলি বাদ find * ...দিয়ে শেলটি গ্লোববিংয়ের কাজটি চালিয়ে যাওয়ার কারণে (পরিবর্তিত হতে পারে shopt -s dotglob), বর্ণমালা অনুসারে বাছাই করা ফাইলের নাম (উপসর্গ নয়) আউটপুট দেয়। উভয়ই পদ্ধতির মধ্যে ফাইলের প্রতিলিপি অন্তর্ভুক্ত নয় ; এটি করতে বিকল্পটি ব্যবহার করুন -L
mklement0

15
ls -p | grep -v /

ls -p আপনাকে ফোল্ডারটির নাম / পরে দেখাতে দেয়, যা আপনাকে মুছে ফেলার জন্য ট্যাগ হিসাবে কাজ করে।


এটা তোলে এর চমৎকার একটি উদাহরণ ব্যবহার দেখতে lsছাড়াও find, আধুনিক আয় আপেক্ষিক পাথ এবং সাবেক শুধুমাত্র ফাইলের নামের গেছে। কাজের জন্য সঠিক টুল ব্যবহার করুন।
বেন আমোজ

5
  • 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 রেজিস্ট্রি

দ্রষ্টব্য: আপনি নোড.জেএস ব্যবহার না করলেও, এর প্যাকেজ ম্যানেজার, npmপ্ল্যাটফর্ম জুড়ে কাজ করে এবং ইনস্টল করা সহজ; চেষ্টা করুন
curl -L https://git.io/n-install | bash

নোড.জেএস ইনস্টল করার সাথে সাথে নীচে ইনস্টল করুন:

[sudo] npm install fls -g

দ্রষ্টব্য :

ম্যানুয়াল ইনস্টলেশন

  • এই bashস্ক্রিপ্ট হিসাবে ডাউনলোড করুন fls
  • এটি দিয়ে সম্পাদনযোগ্য করুন chmod +x fls
  • এটিকে সরান বা আপনার কোনও ফোল্ডারে সিমলিংক করুন $PATH, যেমন /usr/local/bin(ম্যাকোস) বা /usr/bin(লিনাক্স)।

4
উজ্জ্বল। এমনকি এতে অন্য স্ক্রিপ্ট তৈরি করা জড়িত। আপনি যে লিখিত সরল পাঠ্য উত্সটি থেকে লিঙ্ক করেছেন তা একটি টেক্সট ফাইলে অনুলিপি করে আটকে দিয়েছি এবং এটি কমান্ড দিয়ে সাইগউইনে চালিয়েছি: fls.sh f * .png> pngs.txt এবং বিঙ্গো: কোনও পাথ ছাড়াই .png ফাইলের একটি তালিকা। তবে সত্যই, এলএসের ডস '"দির / বি" স্যুইচের সাথে তুলনা করার কোনও বিকল্প নেই? আমি ls এর সাহায্যে দেখেছি - সহায়তা আউটপুট, এবং সাজানোর কিছুই নেই, অন্তত।
অ্যালেক্স হল

4
@ অ্যালেক্সহল: ধন্যবাদ; tl; dr: try -1(এক নম্বর); lsপ্রকৃতপক্ষে "বেয়ার" আউটপুট, অর্থাৎ কেবল ফাইলের নামেই ডিফল্ট থাকে তবে টার্মিনালে আউটপুট দেওয়ার সময় কলাম-ভিত্তিক লেআউট (প্রতি লাইনে একাধিক ফাইলের নাম) ব্যবহার করা হয়। প্রতি আউটপুট লাইনে একটি ফাইলের নাম পেতে (যা যা হয় dir /b, যদি মেমোরি পরিবেশন করে), -1বিকল্পটি ব্যবহার করুন , যা স্টিডআউট যখন কোনও টার্মিনালের সাথে সংযুক্ত থাকে না , যেমন পাইপ বা আউটপুট ফাইলে প্রেরণ করার সময় এটি অন্তর্ভুক্ত থাকে।
mklement0

2

উপ-ডিরেক্টরি ছাড়াই কিছু ডিরেক্টরি তালিকাভুক্ত সামগ্রী

আমি 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দ্বারা .জন্য লিস্টে বর্তমান ডিরেক্টরী বা ..জন্য পেরেন্ট ডাইরেক্টরি


1

আপনি এটির lsসাথে grepবা ব্যবহার করতে এবং egrepএটি একটি উপন্যাস হিসাবে আপনার প্রোফাইলে রাখতে পারেন:

ls -l | egrep -v '^d'
ls -l | grep -v '^d'

উপরে বর্ণিত কারণে আমি এটি কোনও স্ক্রিপ্টে রাখি না, তবে আরও একটি দ্রুত এবং নোংরা সমাধান: ls -F |
গ্রেপ

1

ফাইলগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ -" | tr -s '' | কাট-ডি '' -ফ 9

ডিরেক্টরিগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ ডি" | tr -s '' | কাট-ডি '' -ফ 9

লিঙ্কগুলি সন্ধান করুন: ls -l / home | গ্রেপ "^ l" | tr -s '' | কাট-ডি '' -ফ 9

tr -s '' আউটপুটটিকে একটি স্থান-সীমিত ফাইলগুলিতে পরিণত করে কাট কমান্ডটি ডিলিমিটারটি একটি স্পেস বলে নবম ক্ষেত্রটি (সর্বদা ফাইলের নাম / ডিরেক্টরি নাম / লিঙ্কনাম) ফেরত দেয়।

আমি এই সব সময় ব্যবহার!


কি দারুন! যদি ফাইলের নামগুলিতে ফাঁকা স্থান থাকে?
এফ হাউরি

নবম ক্ষেত্র থেকে সমস্ত কিছু পেতে "9-" ব্যবহার করুন। লিঙ্কগুলিও এটি দ্বারা প্রভাবিত হয় যেহেতু তারা নবম ক্ষেত্রের পরে হবে।
রিচার্ড

0
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }

xargsএটি কাজ করতে যোগ করা হয়েছে এবং অতিরিক্ত তথ্য ছাড়া কেবল ফাইল নাম প্রদর্শন করার -1পরিবর্তে ব্যবহৃত হয়েছে used-lls


এটির কিছুটা যোগ্যতা রয়েছে, এটি সময় অনুসারে বাছাই কার্যকর করে, যদিও এর সাথে যুক্ত করার মতো যুক্তিযুক্ত উপায় কম রয়েছেfind -printf0 '...' | sort -z
ট্রিপলি

-2

কেবল কার্পেটের উত্তরে যুক্ত করা। ফাইলগুলির অনেক দরকারী দেখার জন্য, আপনি আউটপুটটি ls এ পাইপ করতে পারেন।

find . -maxdepth 1 -type f|ls -lt|less

আপনি যখন প্রচুর ফাইল ডাউনলোড করেন এবং সাম্প্রতিক ফাইলগুলির একটি অ-বিশৃঙ্খল সংস্করণ দেখতে চান তখন তালিকার বিন্যাসে সর্বাধিক পরিবর্তিত ফাইলগুলি দেখায় quite


4
এটি সম্ভবত আপনি প্রত্যাশা হিসাবে আচরণ করে না! lsস্ট্যান্ডার্ড ইনপুট পড়েন না, তাই এটিতে কোনও পাইপ দেওয়া অকেজো ls। মিস করেছেন xargs?
gniourf_gniourf 4'15

এটিকে অন্যভাবে বলার জন্য: findএই উত্তরের আদেশটি সম্পূর্ণ উপেক্ষা করা হবে ; সামগ্রিক কমান্ডটি একই ls -lt | less, যা কোনও ধরনের ফিল্টারিং করে না
mklement0

4
যদিও জিএনইউ দিয়ে findআপনি করতে পারেন find . -maxdepth 1 -type f -ls। এটি ম্যাক ওএসেও কাজ করে বলে মনে হচ্ছে, যদিও আমি বিশ্বাস করি -maxdepthএবং -lsসঠিকভাবে পোর্টেবল বিকল্প নয়।
ট্রিপলি

-2

"সন্ধান করুন '-ম্যাক্সডেপথ'" আমার পুরানো সংস্করণের বাশের সাথে কাজ করে না, তাই আমি ব্যবহার করি:

f এ $ (ls) এর জন্য; যদি [-f $ f] করুন; তারপরে প্রতিধ্বনি $ চ; ফাই সম্পন্ন


এর ব্যবহার for f in $(ls)দ্বিগুণ ভুল। আপনি for f in *এটির সাথে এটি ঠিক করতে পারছিলেন তবে এটি ভঙ্গ হবে কারণ আপনি যুক্তিটি echoসঠিকভাবে উদ্ধৃত করছেন না ।
ট্রিপলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.