একাধিক ফাইল এক্সটেনশনের জন্য `সন্ধান করুন Using


16

আমি জাভা ফাইলগুলিতে পাঠ্যগুলির রেখা গণনা করার জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

find . -name '*.java' | xargs wc -l

findএকাধিক ফাইল এক্সটেনশান মেলে আমি কীভাবে কমান্ড প্যারামিটারগুলি সংশোধন করতে পারি ? উদাহরণস্বরূপ, আমি সিপিপি, সি এবং এইচ ফাইলগুলির জন্য উপরের অপারেশনটি ব্যবহার করতে চাই।


এই প্রশ্নটি আসলে findকমান্ড সম্পর্কে , যেহেতু আপনি যেখানে ফাইলগুলির সাথে মিল রেখে সন্ধান করছেন।
iglvzx

1
এছাড়াও, হয় ব্যবহার find -print0 | xargs -0কনস্ট্রাক্ট বা এমনকি ভাল এবং সহজ: find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +। এটি কোনও ফাইল নামের সমস্যা (ফাঁকা স্থান, নতুন লাইন এবং তাই) এড়াতে পারবেন এবং এটি (খুব) ভাল কাস্টম।
ড্যানিয়েল অ্যান্ডারসন

উত্তর:


16

-oএকটি OR এর জন্য বিকল্পটি ব্যবহার করুন । উদাহরণস্বরূপ, এই তালিকা হবে .cpp, .cএবং .hফাইলগুলি:

find . -name \*.cpp -o -name \*.c -o -name \*.h

আহ। *যদি কোড হিসেবে ফরম্যাট করা আর চাহিদা পলান করা হবে। সম্পূর্ণরূপে যে উপেক্ষা। :)
iglvzx

হ্যাঁ, এটি দুটি ব্যক্তির দ্বারা তিনটি সম্পাদনা নিয়েছে তবে আমরা এটি পেয়েছি।
JOTN

2
এটি ওএসএক্সে আমার পক্ষে কাজ করে নি (কেবলমাত্র শেষ নামটি *
গিলিয়েড

2

আপনাকে -o বিকল্পটি ব্যবহার করতে হবে। উদাহরণস্বরূপ নীচের বিবৃতিটি একটি ফোল্ডারে সমস্ত png, jpg এবং gif ফাইলগুলি সন্ধান করে।

find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \)

আমি -iname বিকল্পটি ব্যবহার করি যাতে ম্যাচটি সংবেদনশীল না হয়।


1
iname সন্ধানের সমস্ত সংস্করণে পাওয়া যায় না।
JOTN

2
$ find /path/ -name '*.cpp' -or -name '*.c' -or -name '*.h'

"-অর" বলছে আমি দুটি সেট / উভয়ই সন্ধান করছি।

আমি সম্প্রতি এখানে বুলিয়ান অপারেটরগুলির সাথে সন্ধানের জন্য একটি দ্রুত গাইড লিখেছি: http://jamesfishwick.com/2012/linux-find-and-boolean-operators


1

যদিও সমস্ত উত্তর কমবেশি একই, তবে আমি একাধিক নাম এবং বুলিয়ান অপারেটরদের মধ্যে সেগুলি পড়তে পেলাম না।

আমি মনে করি এটি আরও মার্জিত সমাধান হতে পারে:

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$"

আসুন এটি ভেঙে দিন

  • find . সমস্ত পথে পুনরাবৃত্তভাবে বর্তমান পথে সন্ধান করে (আপনার প্রয়োজনে অন্য কোনও পথে পরিবর্তন করুন)
  • -type fঅনুসন্ধানগুলি কেবল ফাইলগুলিতে সংকীর্ণ করে তোলে (খুব বেশি গতি অর্জন নয়, তবে এখনও ...)
  • | grep -Eআমি ম্যাক ওএস এক্স-তে গ্রেপ স্বীকৃতি বা ( |) অপারেটর পেতে এটি ব্যবহার করেছি যা ফ্রিবিএসডি গ্রেপ ব্যবহার করে , জিএনইউ গ্রেপের প্রয়োজন নেই (আপনার manফাইলটি দেখুন)।
  • "\.java$|\.cpp$|\.c$"রেগুলার এক্সপ্রেশন যা ফাইল যার অন্তর্ভুক্ত নাম প্রান্ত সঙ্গে .java, .cppএবং .c(অ্যাড বেশী আপনি প্রয়োজন)

এরপরে আপনি আরও প্রক্রিয়াজাতকরণের জন্য ফলাফলের তালিকাটি পাইপ করতে পারেন, যেমন

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xargs sed -i '' $'/s/\r$//'

এই উদাহরণটি CRLFওএস এক্স / লিনাক্সের সমাপ্ত ডস / উইন্ডোজ লাইনটি সরিয়ে দেয় LF(এটি ওএস এক্স sedসিনট্যাক্সও রয়েছে, আপনার সংস্করণটির বিশদটি পরীক্ষা করে দেখুন)।


আমি 25 টি বিভিন্ন এক্সটেনশনের সাথে মিলে যাওয়া পরামিতি ব্যবহার করে সমস্ত ভিডিও ফাইলের সন্ধান করতে চেয়েছি। এটিই ছিল আমার পক্ষে একমাত্র পন্থা। (উবুন্টু 14.04 এলটিএস)
বয়স্ক গীক

0

ব্যবহার

find path/to/dir -name "*.ext1" -o -name "*.ext2"

ব্যাখ্যা

  1. প্রথম প্যারামিটারটি ডিরেক্টরিটি আপনি অনুসন্ধান করতে চান।
  2. ডিফল্টরূপে findপুনরাবৃত্তি করে।
  3. এর -oঅর্থ দাঁড়ায় -or। সুতরাং উপরের অর্থ এই ওয়াইল্ডকার্ড বা এটির জন্য অনুসন্ধান করুন। আপনার যদি কেবল একটি প্যাটার্ন থাকে তবে প্রয়োজন নেই -o
  4. ওয়াইল্ডকার্ড প্যাটার্নের চারপাশে উদ্ধৃতিগুলি প্রয়োজনীয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.