লিনাক্স শেলে find কমান্ড ফাইলসিস্টেমে ফাইল সার্চ করতে দেয়। এটি নাম, ইউজার পারমিশন, এবং সাইজ দিয়ে ফাইল খুঁজে বের করতে পারে। find কমান্ড খুঁজে পাওয়া ফাইলগুলোর ওপর অ্যাকশনও পারফর্ম করতে পারে।
Find কমান্ড সিনট্যাক্স
find কমান্ডের সিনট্যাক্স নিচের মতো:
find [OPTIONS] [PATH] [EXPRESSION]
এখানে:
- [OPTIONS] হলো নিচের টেবিল থেকে find বিহেভিয়ার নির্ধারণের অপশন
- [PATH] হলো সার্চের স্টার্টিং পয়েন্ট
- [EXPRESSION] হলো ম্যাচিং ফাইল খুঁজে বের করার টেস্ট এবং খুঁজে পাওয়া ফাইলগুলোর ওপর যেকোনো অ্যাকশন
অপশন
find কমান্ডের সাধারণ ব্যবহৃত OPTIONS ম্যানুয়াল থেকে অডাপ্টেড:
| -P | কখনো সিম্বলিক লিঙ্ক ফলো করবেন না। এটি ডিফল্ট বিহেভিয়ার। |
| -L | সিম্বলিক লিঙ্ক ফলো করুন। find ফাইল এক্সামিন বা প্রিন্ট করলে, ইনফো লিঙ্কটি যেই ফাইলকে পয়েন্ট করে সেটার প্রপার্টি থেকে নেওয়া হবে, লিঙ্কটি থেকে নয়। |
| -H | সিম্বলিক লিঙ্ক ফলো করবেন না, কমান্ড লাইন আর্গুমেন্ট প্রসেস করার সময় ছাড়া। |
এক্সপ্রেশন
find ম্যানুয়াল থেকে কিছু कॉमन স্টেটমেন্ট যেগুলো EXPRESSION বানাতে ব্যবহার করা যায়, যা ম্যাচিং ফাইল টেস্ট করে এবং অপশনালি সেটার ওপর অ্যাকশন নেয়:
| টেস্টস (সার্চ কন্ডিশন) | |
|---|---|
| -empty | খালি ফাইল খুঁজুন |
| -executable | এক্সিকিউটেবল ফাইল এবং সার্চেবল ডিরেক্টরি ম্যাচ করুন |
| -group name | ফাইল name গ্রুপের অন্তর্গত |
| -mtime n | ফাইল ডেটা শেষে n*24 ঘন্টা আগে মডিফাই হয়েছিল (কম/বেশি/একজাক্ট) |
| -name pattern | ফাইলের বেস নাম (লিডিং ডিরেক্টরি বাদ দিয়ে) pattern-এর সাথে ম্যাচ করে |
| -path pattern | ফাইল পথ pattern-এর সাথে ম্যাচ করে |
| -readable | কারেন্ট ইউজার দ্বারা রিডেবল ফাইল ম্যাচ করুন |
| -size n | ফাইল n ইউনিট স্পেস ব্যবহার করে (কম/বেশি/একজাক্ট), রাউন্ড আপ (উপলব্ধ ইউনিটের জন্য নিচের টেবিল দেখুন) |
| -type c | ফাইল টাইপ c (c-এর ভ্যালু için নিচের টেবিল দেখুন) |
| -user name | ফাইল name ইউজারের অধিনস্থ |
| অ্যাকশনস | |
|---|---|
| ফাইলের নাম আউটপুট করুন (ডিফল্ট অ্যাকশন) | |
| -prune | ফাইল ডিরেক্টরি হলে, সেটার ভেতরে ডিসেন্ড করবেন না |
| -depth | প্রতিটি ডিরেক্টরির কন্টেন্ট প্রথমে প্রসেস করুন, তারপর ডিরেক্টরি |
| -delete | ম্যাচ করা ফাইল ডিলিট করুন। -delete অ্যাকশন অপশনরও কাজ করে (যেহেতু -depth ইমপ্লাই করে) |
| -exec command | command এক্সিকিউট করুন |
| -execdir command | -exec-এর মতো, কিন্তু কমান্ড ম্যাচ করা ফাইলवाले সাবডিরেক্টরি থেকে রান হয় |
| -ok command | -exec-এর মতো কিন্তু ইউজারকে প্রথমে পুঁছবে। |
| -okdir command | -execdir-এর মতো কিন্তু -ok-এর মতো ইউজারকে পুঁছবে। |
| -printf format | format-এ ফাইল ডিটেইলস প্রিন্ট করুন |
এক্সপ্রেশনে অপারেটর
অপারেটর ব্যবহার করে এক্সপ্রেশনে আইটেম চেইন করা যায়:
| -o | OR |
| -a | AND (ডিফল্ট অপারেটর এক্সপ্রেশনের মাঝপথে যখন কোন অপারেটর না দেওয়া থাকে) |
ফাইল খুঁজে বের করার সম্পূর্ণ অপশন এবং এক্সপ্রেশন লিস্ট পেতে চালান:
man find
Find কমান্ড উদাহরণ
অপশন, এক্সপ্রেশন, এবং অ্যাকশন কম্বাইন করে সিম্পল থেকে কমপ্লেক্স ফাইন্ড অপারেশন বানানো যায়। নিচে উদাহরণ:
ফাইল নাম দিয়ে ফাইল খুঁজুন
এই উদাহরণ /home/screw ডিরেক্টরিতে myfile নামवाले সকল ফাইল খুঁজে বের করবে:
find /home/screw -name myfile
টাইপ দিয়ে সার্চ
উপরের কমান্ড সব ম্যাচিং ফাইল রিটার্ন করবে - সহ ডিরেক্টরি, লিঙ্ক, ডিভাইস - ফাইল সিস্টেমের সব কিছু।
-type f এক্সপ্রেশন সার্চকে শুধু ফাইল-এ লিমিট করে। myfile নামवाले ফাইল খুঁজতে:
find /home/screw -type f -name myfile
অথবা শুধু ডিরেক্টরি সার্চ করুন:
find /home/screw -type d -name myfile
উপলব্ধ টাইপগুলো:
| b | Block (buffered) special |
| c | Character (unbuffered) special |
| d | Directory |
| p | Named pipe (FIFO) |
| f | Regular file |
| l | Symbolic link; -L অপশন বা -follow অপশন ইফেক্টে থাকলে কখনও true হয় না, यूनলেস লিঙ্ক ব্রোকেন |
| s | Socket |
কেস সেনসিটিভিটি
-name অপশন কেস সেনসিটিভ - কেস ইনসেনসিটিভ সার্চের জন্য -iname ব্যবহার করুন:
find /home/screw -iname mYFiLe
ওয়াইল্ডকার্ড ও রেজেক্স ব্যবহার করে এক্সটেনশন দিয়ে ফাইল খুঁজুন
ফাইল নেমে ওয়াইল্ডকার্ড (*) ব্যবহার করা যায়, যা এক্সটেনশন দিয়ে সার্চ করতে দেয়:
find -L /home/screw -name '*.pdf'
উপরের কমান্ড .pdf এক্সটেনশন والے সকল ফাইল খুঁজে বের করবে। কোটেড সার্চ প্যাটার্নে রেজেক্স থাকতে পারে।
নাম বা এক্সটেনশন দিয়ে ফাইল বাদ দিন
-not অপারেটর ব্যবহার করে নাম বা প্যাটার্ন দিয়ে ফাইল বাদ দিয়ে বাকি রেজাল্ট পান:
find /home/screw -type f -not -name '*.pdf'
পুরো ডিরেক্টরি রেজাল্ট থেকে বাদ দিন
-prune অপশন ব্যবহার করে ম্যাচিং পথ এবং তার কন্টেন্ট বাদ দিন। নিচের উদাহরণ /home/screw/junk ডিরেক্টরি রেজাল্ট থেকে বাদ দেবে:
find /home/screw -path /home/screw/junk -prune -o -print
সাইজ দিয়ে ফাইল সার্চ
এই উদাহরণ ৫০০ কিলোবাইটের নিচের সকল ফাইল খুঁজে বের করবে:
find /home/screw -type f -size -500k
এই উদাহরণ ১০০ এবং ২০০ কিলোবাইটের মাঝপথের ফাইল খুঁজে বের করবে দুটি সাইজ কন্ডিশন পাস করে:
find /home/screw -type f -size +100k -size -200k
সাইজ সার্চের জন্য উপলব্ধ ইউনিট:
| b | ৫১২-বাইট ব্লক (ডিফল্ট যদি কোন সাফিক্স না দেয়া থাকে) |
| c | বাইটস |
| w | টু-বাইট ওয়ার্ডস |
| k | কিবিবাইট (KiB, ১০২৪ বাইট ইউনিট) |
| M | মেবিবাইট (MiB, ১০২৪ * ১০২৪ = ১০৪৮৫৭৬ বাইট) |
| G | গিবিবাইট (GiB, ১০২৪ * ১০২৪ * ১০২৪ = ১০৭৩৭৪১৮২৪ বাইট) |
মডিফিকেশন বা এক্সেস ডেট
নিচের উদাহরণ গত ১৪ দিনে মডিফাই হওয়া সকল .txt ফাইল খুঁজে বের করবে:
find /home/screw -name '*.txt' -mtime 14
মডিফিকেশন ডেটের বদলে লাস্ট এক্সেস দিয়ে সার্চ করতে -atime অপশন ব্যবহার করুন -mtime এবং -atime-র বদলে।
সাইন (+ বা –) যোগ করে দিনের চেয়ে বেশি বা কম সময় আগে মডিফাই হওয়া ফাইল সার্চ করা যায় - এই উদাহরণ ১৪ দিনের চেয়ে বেশি আগে মডিফাই হওয়া ফাইল রিটার্ন করবে।
find /home/screw -name '*.txt' -mtime +14
দিনের বদলে মিনিট ইউনিট ব্যবহার করতে -mmin -amin ব্যবহার করুন -mtime এবং -atime-র বদলে।
স/manual-এ আরও অনেক অপশন আছে, চালান:
man find
ওয়নার ইউজার/গ্রুপ
/home/screw ডিরেক্টরিতে root-ওন্ড সকল ফাইল খুঁজতে:
find /home/screw -user root
পারমিশন
নিচের কমান্ড গ্লোবাল রিড/রাইট পারমিশন والے সকল ফাইল খুঁজে বের করবে:
find /home/screw -perm 777
chmod কমান্ড সম্পর্কে আমাদের আর্টিকেল দেখুন।
কম্বিনেশন
যেকোনো কম্বিনেশন অফ সার্চ এক্সপ্রেশন ব্যবহার করা যায়। অপারেটর না থাকলে AND অপারেটর ডিফল্ট ধরা হয়।
এই উদাহরণ গত ১৪ দিনে ক্রিয়েট হওয়া ৫০০kb এর নিচের সকল টেক্সট ফাইল খুঁজে বের করবে:
find /home/screw -name '*.txt' -mtime 14 -type f -size -500k
খুঁজে পাওয়া ফাইলগুলোর ওপর অ্যাকশন
ডিফল্টলি find কমান্ড রেজাল্ট প্রিন্ট করে (যা -print অ্যাকশন কল করার সমান)।
find /home/screw -name myfile -print
রেজাল্ট ফরম্যাট কাস্টোমাইজ করুন
ফাউন্ড ফাইল সম্পর্কে অডিশনাল ইনফো সহ আউটপুট কাস্টোমাইজ করা যায়। এই উদাহরণ ফাইল নাম, তারপর ড্যাশ, তারপর বাইটে ফাইল সাইজ প্রিন্ট করবে:
find /home/screw -name '*.txt' -printf '%f - %s bytes'
অনেক ভেরিয়েবল ব্যবহার করা যায় আউটপুট কাস্টোমাইজ করতে, ফাইল সাইজ থেকে মডিফিকেশন/এক্সেস টাইমের ইনডিভিজুয়াল ডেট ফিল্ড - ফুল লিস্টের জন্য ম্যানুয়াল চেক করুন।
রেজাল্ট ফাইলে লিখুন
find অপারেশনের রেজাল্ট রিডাইরেক্ট করুন টেক্সট ফাইলে:
find /home/screw -name myfile > find_results.txt
ডিলিট করা
-delete অ্যাকশন ম্যাচ করা ফাইল ডিলিট করবে (কনফার্মেশন ছাড়া, তাই সাবধান!):
find /home/screw -name '*.junk' -delete
-exec / -execdir দিয়ে কমান্ড এক্সিকিউট
প্রতিটি find রেজাল্টের বিপরীতে যেকোনো শেল কমান্ড এক্সিকিউট করতে -exec অ্যাকশন ব্যবহার করুন:
find /home/screw -name '*.txt' -exec ls -la {} '\;' -exec করেন্ট ওয়ার্কিং ডিরেক্টরি থেকে কমান্ড এক্সিকিউট করে। ফাইলের লোকেশন থেকে এক্সিকিউট করতে -execdir ব্যবহার করুন:
find /home/screw -name '*.txt' -execdir ls -la {} '\;' উপরের দুটি উদাহরণে, ls -la প্রতিটি রেজাল্টের ওপর রান হয়। কার্লি ব্রেস {} find কমান্ড রেজাল্ট দিয়ে রিপ্লেস হবে, এবং ';' ls কমান্ডের আর্গুমেন্ট টার্মিনেট করবে যাতে find বুঝতে পারে সেটা কোথায় শেষ।
-ok / -okdir দিয়ে কনফার্মেশন প্রম্পট
-ok অ্যাকশন -exec-এর মতো কাজ করে, কিন্তু কমান্ড রান করার আগে আপনাকে পুঁছবে। এটি উপযোগী যদি আপনি ফাইল ডিলিট করতে চান কিন্তু প্রতিটি ফাইলের আগে কনফার্ম করতে চান:
find /home/screw -name '*.txt' -ok rm {} '\;' -okdirও প্রম্পট করে কিন্তু ফাইলের লোকেশন থেকে কমান্ড এক্সিকিউট করে:
find /home/screw -name '*.txt' -okdir rm {} '\;'