প্রদত্ত স্ট্রিং সহ ফাইলগুলির সংখ্যা


19

বাশ / এস-এ ইনপুট হিসাবে প্রদত্ত স্ট্রিং থাকা ফাইলগুলির (একটি ডিরেক্টরিতে) সংখ্যা আমি কীভাবে গণনা করতে পারি?

উত্তর:


30

grep -l "string" * | wc -l ওয়ার্কিং ডিরেক্টরিতে থাকা সমস্ত ফাইলের সামগ্রীতে "স্ট্রিং" অনুসন্ধান করবে এবং কতটি মিলছে তা আপনাকে বলবে।


1
ডিরেক্টরিতে প্রচুর ফাইল থাকলে এটি কাজ করবে না, এটি ত্রুটি "zsh: আর্গুমেন্ট তালিকাটি দীর্ঘ দীর্ঘ: গ্রেপ" ফেলে দেবে। এ থেকে মুক্তি পেতে কীভাবে কোনও ধারণা?

1
@ user16142 ফাইলগুলির পরিবর্তে ডিরেক্টরিটি গ্রেপ করুন: grep -lr "string" directory | wc -lআপনি যদি পুনরাবৃত্ত অনুসন্ধান করতে না চান তবে আপনি সর্বোচ্চ অনুসন্ধান বিকল্প সহ সন্ধান করতে পারেন: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -lনোট করুন যে এই দ্বিতীয় বিকল্পটি গ্রেপের চেয়ে ধীর।
আগারগারা

9

grepএর প্যারামিটারগুলি -lকেবল ফাইলের নামের সাথে মিলে যা ফলাফল মিলে যায় $PATTERN, wcপরে তাদের গণনা করতে পারে ।

grep -l "$PATTERN" * | wc -l

ধন্যবাদ, তবে ফাইলটিতে একটি প্যাটার্ন নিয়ে ভাবছিলাম ... দ্ব্যর্থক প্রশ্নের জন্য দুঃখিত

যদি তা হয় তবে ওল্ফের উত্তর নিন।
ওয়াগ

3
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *

স্পষ্টকরণ: এটি তাদের ফাইলের নামগুলিতে (ওয়াগের উত্তরের মতো) ফাইলগুলিতে নয় বরং ফাইলগুলিতে "প্যাটার্ন_ট_লুক_ফর্ম" আছে এমন সংখ্যার সন্ধান করে। আপনার প্রশ্ন থেকে আপনি যা খুঁজছেন তা বলা শক্ত।


তবে কিছু অনুপস্থিত? কারণ এটি কাজ করে না

আপনি যদি স্ট্রিং হাঁসের সন্ধান করেন তবে আপনাকে অবশ্যই এটিকে / ডাক / অ্যাওকের মতো লিখতে হবে। আপনি কি করছেন?
জান পারসসন

হ্যাঁ, আউটপুট: awk: পড়ার ত্রুটি (একটি ডিরেক্টরি)

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

ঠিক আছে, ফোল্ডারে আপনার যদি ডিরেক্টরি থাকে তবে আপনাকে স্টার প্রতিস্থাপনের মতো কিছু অতিরিক্ত জিনিস করতে হবে find . ! -name . -prune -type f(ব্যাকটিকগুলি মিস করবেন না)। এই কমান্ডটি কেবল ফোল্ডারে ফাইলগুলি তালিকাভুক্ত করে।
জান পারসসন

2

এটি কোনও ফাইলের সাথে বাশে কাজ করে :

grep -lZ "$pattern" * | tr -cd '\000' | wc -c

ব্যাখ্যা:

  • grepএর -Zবিকল্পটি প্রতিটি ফলাফলকে ␀-বাইট বিভাজক দ্বারা মুদ্রণ করে। এই অক্ষরটি কোনও ফাইলের নামের অংশ হতে পারে না, তাই আমরা কেবল ফাইলের সংখ্যা পেতে পৃথককারীদের সংখ্যা গণনা করতে পারি।
  • আউটপুটটিতে অন্যান্য অক্ষরগুলি থেকে মুক্তি পেতে, আমরা কেবল using বাইট ব্যবহার না করে সবকিছু সরিয়ে ফেলি tr
  • তারপরে কেবল অক্ষরগুলি গণনা করুন wc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.