তালিকা থেকে এক্সটেনশন সহ সমস্ত ফাইল সন্ধান করার জন্য কীভাবে ফাইন্ড কমান্ড ব্যবহার করবেন?


179

ডিরেক্টরি থেকে সমস্ত চিত্র ফাইল খুঁজে বের করতে হবে (gif, png, jpg, jpeg)।

find /path/to/ -name "*.jpg" > log

শুধুমাত্র .jpg ফাইলগুলি অনুসন্ধান করার জন্য কীভাবে এই স্ট্রিংটি সংশোধন করবেন?

উত্তর:


189
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log

6
ম্যাকের জন্য আমার জন্য কাজ করে না, তবে -E (বর্ধিত) বিকল্পের সাথে কাজ করে (সম্ভবত পাইপটি বর্ধিত বৈশিষ্ট্য?): সন্ধান করুন -E / পাথ / টু-ইরেজেক্স "*" j। (Jpg | gif | png | jpeg) "> লগ
লিংক

138
find /path/to/  \( -iname '*.gif' -o -iname '*.jpg' \) -print0

কাজ করবে. আরও মার্জিত উপায় হতে পারে।


16
-নামটি সংবেদনশীল হবে
ক্রিস

1
@ জেরাল্ড: সম্ভবত আপনি পলায়ন করা বন্ধনীতে আপনার ওআর এক্সপ্রেশনটি গোষ্ঠীভুক্ত করতে হবে: find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;অন্যথায় এক্সিকিউটর কেবলমাত্র শেষ অংশে প্রযোজ্য ( -iname '*.jpg' এই ক্ষেত্রে)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

এটি একটি গুরুত্বপূর্ণ মন্তব্য। find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0কেবল jpg ফাইল মুদ্রণ করবে! আপনার এখানে বন্ধনী প্রয়োজন:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
অ্যান ভ্যান রসম

28

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

-Eডান বন্ধনী এবং আপনার Regex মধ্যে পাইপ অব্যাহতি থাকার থেকে বাঁচায়।


2
আমার
সন্ধানে

1
হুমম -Eবিকল্পটি find"বর্ধিত নিয়মিত অভিব্যক্তি" ব্যবহার করতে বলে । বেশ কয়েকটি অন্যান্য সরঞ্জামের একটি অনুরূপ বিকল্প রয়েছে তবে আমি নিশ্চিত নই যে এই বিকল্পটি সমস্ত ইউএনআইএক্স বিতরণে উপলব্ধ।
tboyce12

8
ম্যাক ওএসেও কাজ করে।
সিগুইটারেজ

2
@ tboyce12 ওয়ার্কিং উবুন্টু উপর, আমি -regextype Regex অভিব্যক্তি প্রক্রিয়া সহজ করার জন্য নির্দিষ্ট করতে পারেন: find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
two1ejack

1
হয়তো @cjm find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log-iregexপতাকাটি ব্যবহার করা findসংবেদনশীলতার সাথে কেসের সাথে মেলে tells
tboyce12

11
find /path/to/ -type f -print0 | xargs -0 file | grep -i image

fileফাইলের নাম (বা এক্সটেনশন) নির্বিশেষে ফাইলের ধরণটি সনাক্ত করার চেষ্টা করতে এটি কমান্ডটি ব্যবহার করে ।

যদি /path/toবা কোনও ফাইলনামে স্ট্রিং থাকে imageতবে উপরের বোগাস হিটগুলি ফিরে আসতে পারে। সেক্ষেত্রে আমি পরামর্শ দেব

cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/

দুঃখিত, সেখানে একটি ত্রুটিযুক্ত ক্লিক ছিল এবং আমি স্পষ্টতই ডাউনভোটটি পূর্বাবস্থায় ফিরিয়ে আনতে পারি না ... :(
মার্ক সিম্পসন

6
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)

2
আপনি কীভাবে নাম / ইনাম প্যারামিটারের আশেপাশে (পালিয়ে যাওয়া) প্রথম বন্ধনী যুক্ত করলেন তা ব্যাখ্যা করতে পারেন?
বার্ট ক্লেইঞ্জেল্ড

অসঙ্গতির কোনও কারণ? -iname *.jpg, -o -name *.jpeg, -o -iname *gifসমস্ত একটি সামান্য ভিন্ন বিন্যাস আছে।
পরিত্যক্ত কার্ট

আপনি যদি কমপক্ষে অন্যান্য উত্তরগুলির সাথে আলাদাভাবে ব্যাখ্যা করতে পারেন।
এল-তেডি

6

উপরের @ ডেনিস উইলিয়ামসনের প্রতিক্রিয়ার পরিপূরক হিসাবে আপনি যদি একই রেজেক্সকে ফাইল এক্সটেনশনের ক্ষেত্রে কেস-সংবেদনশীল হতে চান তবে ব্যবহার -iregex:

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log

5

ম্যাক ওএস ব্যবহার করুন

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"


-1

যদি ফাইলগুলির কোনও এক্সটেনশন না থাকে তবে আমরা ফাইল মাইম প্রকারের জন্য সন্ধান করতে পারি

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'

যেখানে (অডিও | ভিডিও | ম্যাট্রোস্কা | এমপিগ) মাইম প্রকারের রেজেক্স

এবং আপনি যদি এগুলি মুছতে চান:

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

বা extension এক্সটেনশনগুলি ছাড়া অন্য সমস্ত কিছু মুছুন:

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

লক্ষ্য করুন! ~ পরিবর্তে ~

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