একাধিক এক্সটেনশানগুলির অনুসন্ধানের জন্য কীভাবে ফাইন্ড কমান্ডটি ব্যবহার করবেন


124

আমি jpgব্যবহার করে সমস্ত চিত্র পেতে পারি :

find . -name "*.jpg"  

তবে আমি কীভাবে pngফলাফলগুলিতে ফাইল যুক্ত করতে পারি ?


উত্তর:


152

-oবিভিন্ন পরামিতিগুলির মধ্যে পতাকা ব্যবহার করুন ।

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) একটি যাদুমন্ত্র মত কাজ করে.

উল্লেখ্য আছে আবশ্যক বন্ধনী এবং তার বিষয়বস্তুর মধ্যে একটি স্থান হতে পারে অথবা এটা কাজ করবে না।

ব্যাখ্যা:

  • type -f - কেবল ফাইল অনুসন্ধান করুন (ডিরেক্টরি নয়)
  • \(- type -fসমস্ত আর্গুমেন্ট প্রয়োগ করার প্রয়োজন
  • -o - লজিকাল ওআর অপারেটর
  • -iname- যেমন -name, তবে ম্যাচটি সংবেদনশীল

আপনার কি প্রথম বন্ধনী দরকার? কমান্ডটি তাদের ছাড়া আমার পক্ষে কাজ করে। কিছু শাঁস জন্য তাদের প্রয়োজন?
মাইকড

2
হ্যাঁ, কমান্ডটি তাদের ব্যতীত "কাজ করবে", তবে আপনি .png-এ শেষ হওয়া ডিরেক্টরিগুলির সাথে .jpg দিয়ে শেষ হওয়া ফাইলগুলিতে আঘাত হানাতে চাইবেন যা ঠিক কী ছিল না।
শাদুর

1
স্পষ্ট করার জন্য ধন্যবাদ! type -fপ্রসারিত না এবং বন্ধনী ছাড়া উভয় এক্সপ্রেশন প্রযোজ্য হলেও, সুতরাং, find ./ -type f -iname \*.jpg -o -type f -iname \*.pngএছাড়াও কাজ করে ... যদিও এটিকে দুটি অক্ষর আর :-)
MikeD

2
এটি অপারেটরের অগ্রাধিকারের বিষয়। ঠিক যেমনটি a * b + cতার থেকে আলাদাa * (b + c)
শাদুর

2
@jdhao ভাল ধরা, সংশোধন করা।
শাদুর

85

আপনার সাথে মানদণ্ড একত্রিত করতে পারেন -oযেমন Shadur দ্বারা প্রস্তাবিত । নোট যে -ojuxtaposition চেয়ে কম অগ্রাধিকার আছে, যাতে আপনার প্রথম বন্ধনী প্রয়োজন হতে পারে।

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

লিনাক্সে, আপনি -regexটর্জার উপায়ে এক্সটেনশনগুলি একত্রিত করতে ব্যবহার করতে পারেন । ডিফল্ট রেজিএক্সপ্যাক্স সিনট্যাক্সটি হ'ল ইম্যাক্স ( বেসিক রিজেক্সপস প্লাস কয়েকটি এক্সটেনশন যেমন \|বিকল্পের জন্য); এক্সটেন্ডেড রেজেক্সপসে স্যুইচ করার বিকল্প রয়েছে

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

ফ্রিবিএসডি, নেটবিএসডি এবং ওএসএক্সে , আপনি এক্সটেন্ডেড রেজেক্সপসের জন্য -regexমিলিত ব্যবহার করতে পারেন -E

find -E . -regex '.*\.(jpg|png)'

এটি -inameপরিবর্তে ব্যবহার করা সর্বদা ভাল -name- তারপরে image.JPGimage.PnG
আপনিও

40

এটি আরও সঠিক:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'

10
আপনি কেন এটি "আরও" সঠিক বলে থাকেন?
কেভিন

2
@Kevin আমি কারণ -iregexম্যাচ jpgসেইসাথে JPG Jpg jpGএবং এই ধরনের। আমার মনে হয় এর $দরকার নেই।
অট--

এটি MinGW এ সূক্ষ্মভাবে কাজ করে ।
পিটার মর্টেনসেন

2
প্রথমত, আপনি অনুসন্ধানের ফোল্ডারটিকে প্রথম যুক্তি হিসাবে বাদ দিয়েছেন যা একটি ত্রুটি ছুঁড়ে দেবে। দ্বিতীয়ত, ওএসএক্সে প্রথম বন্ধনীর হাত থেকে রেহাই কার্যকর হবে না এবং এর পরিবর্তে এটি ব্যবহার করা উচিত: find -E . -iregex '.*\.(jpg|png|gif)'@ সোরিনের উত্তরে দেখানো হয়েছে।
সিসিপিজ্জা

8

এটি পরিষ্কার করার জন্য, লিনাক্স, ইউনিক্স এবং ম্যাকোস স্বাদে একমাত্র বিকল্পটি কাজ করে:

find -E . -regex '.*\.(jpg|png)'

এটি কারণ ওএস এক্স সংস্করণটি কিছুটা আলাদা, তবে বেশিরভাগ প্ল্যাটফর্মগুলিতে ভালভাবে লেখা জিনিসগুলি লেখা গুরুত্বপূর্ণ।


2
-উ পতাকাটি উবুন্টু 14.04
গোগাম্যান

-E পতাকাটি MinGW- তে বৈধ নয় (কমপক্ষে সংস্করণ / কনফিগারেশনটি আমি এটি ব্যবহার করে দেখেছি (নির্দিষ্ট সংস্করণের জন্য ডিফল্ট কনফিগারেশন))।
পিটার মর্টেনসেন

ওএসএক্সে কোন অংশটি -type f \( -iname \*.png -o -iname \*.jpg\)কাজ করে না?
শাদুর

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.