(আমি find
এখানে জিএনইউ ধরে নিচ্ছি )
ঠিক ব্যবহার করা হচ্ছে
find filename
হবে , দ্রুত হতে কারণ এটা শুধু ফিরে আসবে filename
, অথবা ভিতরে নাম filename
যদি এটি একটি ডিরেক্টরি অথবা একটি ত্রুটি যদি এই নামের বর্তমান ডিরেক্টরির মধ্যে অস্তিত্ব ছিল না। এটি একটি খুব দ্রুত অপারেশন, এর মতো ls filename
(তবে filename
ডিরেক্টরি যদি পুনরাবৃত্ত হয় তবে ডিরেক্টরি হয়)।
বিপরীতে,
find | grep filename
বর্তমান ডিরেক্টরি এবং নীচে থেকে সমস্ত নামের find
একটি তালিকা তৈরি করার অনুমতি দেয় যা এরপরে ফিল্টার হবে। এটি অবশ্যই অনেক ধীর অপারেশন হবে।grep
আমি ধরে নিচ্ছি যে আসলে যা ছিল উদ্দেশ্য ছিল
find . -type f -name 'filename'
এটি filename
বর্তমান ডিরেক্টরি বা নীচের যে কোনও জায়গায় নিয়মিত ফাইলের নাম হিসাবে সন্ধান করবে ।
এটি তত দ্রুত (বা তুলনামূলক দ্রুত) হবে find | grep filename
তবে grep
সমাধানটি filename
প্রতিটি পাওয়া নামের পুরো পথের -path '*filename*'
সাথে মিলবে , যা করবে তার সাথে একইভাবে find
।
বিভ্রান্তিটি কীভাবে find
কাজ করে তার একটি ভুল বোঝাবুঝি থেকে আসে ।
ইউটিলিটিটি কয়েকটি পাথ নেয় এবং এই পাথগুলির নীচে সমস্ত নাম দেয়।
তারপরে আপনি বিভিন্ন পরীক্ষাগুলি ব্যবহার করে ফিরে আসা নামগুলি সীমাবদ্ধ করতে পারেন যা ফাইলের নাম, পথ, টাইমস্ট্যাম্প, ফাইলের আকার, ফাইলের প্রকার ইত্যাদি নিয়ে কাজ করতে পারে using
যখন তুমি বললে
find a b c
আপনি find
তিনটি পথের অধীনে উপলব্ধ প্রতিটি নাম তালিকাবদ্ধ করতে বলেন a
, b
এবং c
। বর্তমান ডিরেক্টরিটিতে যদি নিয়মিত ফাইলগুলির নাম হতে থাকে তবে এগুলি ফিরিয়ে দেওয়া হবে। যদি তাদের মধ্যে কোনও ডিরেক্টরিটির নাম হয়ে থাকে, তবে সেই ডিরেক্টরিতে এটি আরও সমস্ত নামের সাথে ফিরে আসবে।
যখন আমি করি
find . -type f -name 'filename'
এটি বর্তমান ডিরেক্টরিতে ( .
) এবং নীচে সমস্ত নামের একটি তালিকা উত্পন্ন করে। তারপরে এটি নিয়মিত ফাইলগুলির মধ্যে নামগুলি সীমাবদ্ধ করে, যেমন ডিরেক্টরিগুলি নয় ইত্যাদি -type f
। এরপর যে ম্যাচ নামের আরও সীমাবদ্ধতা হল filename
ব্যবহার -name 'filename'
। স্ট্রিংটি filename
কোনও ফাইলের নাম গ্লোব্বিং প্যাটার্ন হতে পারে, যেমন *.txt
(কেবল এটি উদ্ধৃত করা মনে রাখবেন!)।
উদাহরণ:
নিম্নলিখিতটি .profile
আমার হোম ডিরেক্টরিতে ডাকা ফাইলটি "সন্ধান" করে বলে মনে হচ্ছে :
$ pwd
/home/kk
$ find .profile
.profile
তবে প্রকৃতপক্ষে, এটি পথে সমস্ত নাম ফেরত দেয় .profile
(কেবলমাত্র একটি নাম আছে, এবং এটি এই ফাইলটির)।
তারপরে আমি cd
এক স্তর উপরে উঠে আবার চেষ্টা করব:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
find
কমান্ড এখন কোন পথ নামক খুঁজে পাচ্ছি না .profile
।
তবে, যদি আমি বর্তমান ডিরেক্টরিটি সন্ধান করতে পাই এবং তারপরে ফিরে আসা নামগুলি কেবল সীমাবদ্ধ করে রাখি তবে সেখান.profile
থেকে এটি এটি খুঁজে পেতে পারে:
$ pwd
/home
$ find . -name '.profile'
./kk/.profile