> For the complete documentation index, see [llms.txt](https://sh.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sh.howtocode.dev/3.0.0.part3intro/3.5.0.0.search/3.5.2.0.find/3.5.2.1.test.md).

# find: টেস্ট

`find` প্রোগ্রামটিতে অপশন হিসেবে আমরা কিছু ফিল্টার যোগ করতে পারি। অর্থাৎ, সার্চ করার সময় ওই বিষয়গুলোর প্রতি নজর দেবে। এবং সেইসব ফাইলই দেখাবে যেগুলো শর্তপূরণ করে। মোটের ওপর সবরকম টেস্টকে আমরা তিনভাগে ভাগ করতে পারি।

* **ফাইলের ধরণ সংক্রান্ত টেস্ট**: এই টেস্টগুলো দিয়ে ফাইলের ধরণ নির্দিষ্ট করে দেওয়া যায়।
* **ফাইলের আকার সংক্রান্ত টেস্ট**: এগুলো ব্যবহৃত হয় নির্দিষ্ট আকারের ফাইল খুঁজতে।
* **অন্যান্য**: উপরের দুই ধরণের ছাড়া বাকি সব টেস্ট এই ধরণের অন্তর্ভূক্ত।

## ফাইলের ধরণ সংক্রান্ত টেস্ট

`find ~ | wc -l` কমান্ড দিয়ে আমরা হোম ডিরেক্টরির সকল ফাইল ও সাবডিরেক্টরির মিলিত সংখ্যা পেয়েছিলাম। এখন আমরা যদি চাই শুধু ডিরেক্টরির সংখ্যা পেতে তাহলে কী করতে হবে? আমাদের `find` প্রোগ্রামকে বলতে হবে যে শুধু ডিরেক্টরিগুলোই যেন সে আমলে আনে। আমরা সেটি করতে পারি এভাবে:

```
me@howtocode-pc: find ~ -type d | wc -l
13840
```

তাহলে, আমরা দেখতে পাচ্ছি, কোনো নির্দিষ্ট ধরণের ফাইল খুঁজতে হলে আমাকে **-type** অপশনটি যোগ করতে হবে এবং তার সাথে দিতে হবে ফাইলের ধরণ নির্দেশক বিশেষ চিহ্ণ। যেমন এক্ষেত্রে **d** দিয়ে directory বোঝানো হয়েছে। আমরা নিচের টেবিল থেকে যেকোনো চিহ্ন ধরণ বোঝাতে ব্যবহার করতে পারি:

| চিহ্ন | ফাইলের ধরণ                      |
| ----- | ------------------------------- |
| b     | ব্লক স্পেশাল ডিভাইস ফাইল        |
| c     | ক্যারেক্টার স্পেশাল ডিভাইস ফাইল |
| d     | ডিরেক্টরি                       |
| f     | সাধারণ ফাইল                     |
| l     | সিম্বোলিক লিঙ্ক                 |

## ফাইলের আকার সংক্রান্ত টেস্ট

এবার মনে করুন আমরা সেইসব ফাইল সংখ্যা জানতে চাই যেগুলোর আকার ৫০০ মেগাবাইটের চেয়ে বড়। তাহলে আমরা সেটা করতে পারি এই কমান্ড দিয়ে:

```
me@howtocode-pc: find ~ -type f -size +500M | wc -l
11
```

তারমানে আকার অনুযায়ী ফিল্টার করতে আমাদের **-size** অপশন ব্যবহার করতে হবে। তারপর '+' বা '-' দিয়ে বড় বা ছোট বোঝাতে হবে। তারপর সংখ্যা ও একক নির্দেশক চিহ্ণ। যেমন এখানে মেগাবাইটের জন্য **M** ছিল।

এবার আমরা চিহ্নগুলো দেখে নিই:

| চিহ্ন | একক                                                                            |
| ----- | ------------------------------------------------------------------------------ |
| b     | ৫১২ বাইটের ব্লক। কোনো এককনির্দেশক চিহ্ণ না থাকলে এটি ডিফল্ট হিসেবে ব্যবহৃত হয়। |
| c     | বাইট                                                                           |
| w     | ২ বাইটের শব্দ                                                                  |
| k     | কিলোবাইট                                                                       |
| M     | মেগাবাইট                                                                       |
| G     | গিগাবাইট                                                                       |

## অন্যান্য টেস্ট

মনে করি হোম ফোল্ডারে আমরা কিছু ISO ইমেজ খুঁজবো যেগুলো ৫০০এমবির চেয়ে বড়। যেহেতু ইমেজগুলো ফাইল এবং এর এক্সটেনসন হবে **iso** আমরা লিখতে পারি:

```
me@howtocode-pc: find ~ -type f -name "*.iso" -size +500M
/home/me/porteus-refinished.iso
/home/me/lubuntu-14.04.1-desktop-i386.iso
/home/me/porteus-pocketboy-25-12-14.iso
/home/me/archlinux-2015.01-1-archboot.iso
/home/me/debian-7.7.0-amd64-CD-1.iso
/home/me/lubuntu-14.10-desktop-i386.iso
```

এখানে আমরা **-name** অপশন যোগ করেছি। আর ওয়াইল্ডকার্ড ব্যবহার করে সেইসব ফাইল খুঁজতে বলেছি যেগুলোর শেষ হয় `.iso` দিয়ে।

`find` কমান্ডের অনেক অনেক অপশন আছে। তারমধ্যে গুরুত্বপূর্ণ কিছু এখানে দিচ্ছি:

| টেস্ট            | কাজ                                                                            |
| ---------------- | ------------------------------------------------------------------------------ |
| -cmin *n*        | *n* মিনিট আগে বা পরে স্ট্যাটাস মোডিফাইড হয়েছে।                                 |
| -cnewer *file*   | *file* এর পরে স্ট্যাটাস বা ডাটা মোডিফাইড হয়েছে এমনসব ফাইল বা ডিরেক্টরি খুঁজবে। |
| -ctime *n*       | *n* দিন আগে স্ট্যাটাস মোডিফাইড হয়েছে।                                          |
| -empty           | ফাঁকা ফাইল বা ডিরেক্টরি।                                                       |
| -group *name*    | *name* নামক গ্রুপের অন্তর্গত।                                                  |
| -iname *pattern* | নির্দিষ্ট প্যাটার্নের ফাইল বা ডিরেক্টরি খুঁজবে তবে কেস ইনসেনসিটিভ।             |
| -inum *n*        | *n* ইনোড নম্বরওয়ালা সব ফাইল খুঁজে বের করবে।                                    |
| -mmin *n*        | *n* মিনিট আগে বা পরে ডাটা মোডিফাইড হয়েছে।                                      |
| -mtime *n*       | *n* দিন আগে ডাটা মোডিফাইড হয়েছে।                                               |
| -name *pattern*  | নির্দিষ্ট প্যাটার্নের ফাইল বা ডিরেক্টরি খুঁজবে তবে কেস সেনসিটিভ।               |
| -newer *file*    | *file* এর পরে ডাটা মোডিফাইড হয়েছে এমনসব ফাইল বা ডিরেক্টরি খুঁজবে।              |
| -nouser          | এমনসব ফাইল বা ডিরেক্টরি যা কোনো ইউজারের না।                                    |
| -nogroup         | এমনসব ফাইল বা ডিরেক্টরি যা কোনো গ্রুপের না।                                    |
| -perm *mode*     | পারমিশন মোড অনুযায়ী খুঁজবে।                                                    |
| -samefile *name* | *n* ইনোড নম্বরওয়ালা সব ফাইল খুঁজে বের করবে।                                    |
| -user *name*     | *name* নামক ইউজারনেমের ফাইল ও ডিরেক্টরি খুঁজবে।                                |
