Find -maxdepth 0 আমাকে কোনও আউটপুট ফিরিয়ে দিচ্ছে না


17

আমি কীভাবে find -maxdepth 0বিকল্প ব্যবহার করব তা বোঝার চেষ্টা করছি ।

আমি নীচের ডিরেক্টরি কাঠামো আছে।

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

এখন, আমি findনীচের মত আমার কমান্ড কার্যকর করি ।

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

উপরের findকমান্ডগুলির কোনওটি না দিয়েই ফাইল 1 ফিরে আসে।

ম্যান পেজ থেকে findআমি নীচের তথ্যটি দেখতে পাচ্ছি।

-ম্যাক্সডেপথ 0 এর অর্থ কমান্ড লাইন আর্গুমেন্টগুলিতে কেবল পরীক্ষা এবং ক্রিয়া প্রয়োগ করা হয়।

আমি -maxdepth 0বিকল্পের সাথে কয়েকটি উদাহরণ অনুসন্ধান করেছি এবং কোনও সঠিক উদাহরণ খুঁজে পেলাম না।

আমার findসংস্করণটি হ'ল,

find --version
find (GNU findutils) 4.4.2

কেহ দয়া করে আমাকে কিছু পয়েন্টার সরবরাহ করতে পারেন যার ক্ষেত্রে কেস -maxdepth 0বিকল্পটি কার্যকর হবে?

সম্পাদনা

যখন আমি নীচের কমান্ডটি কার্যকর করি, আমি ফাইল 1 টি দুবার তালিকাভুক্ত হয়ে যাব । এইভাবে কাজ করার উদ্দেশ্য কি এটি?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

উত্তর:


24

আমাদের ধরুন যে আমাদের file1বর্তমান ডিরেক্টরিতে রয়েছে। তারপর:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

এখন, দস্তাবেজগুলি কী বলেছে তা দেখুন:

-ম্যাক্সডেপথ 0 এর অর্থ কমান্ড লাইন আর্গুমেন্টগুলিতে কেবল পরীক্ষা এবং ক্রিয়া প্রয়োগ করা হয়।

আমার প্রথম উদাহরণে, .কমান্ড লাইনে কেবল ডিরেক্টরি তালিকাভুক্ত করা হয়। যেহেতু .নাম নেই file1, আউটপুটে কোনও কিছুই তালিকাভুক্ত নয়। উপরের আমার দ্বিতীয় উদাহরণে, উভয়ই .এবং file1কমান্ড লাইনে তালিকাভুক্ত এবং file1মিল রয়েছে বলে -name "file1", এটি আউটপুটে ফিরে এসেছে

অন্য কথায়, -maxdepth 0অর্থ ডিরেক্টরি বা সাব ডিরেক্টরিগুলি অনুসন্ধান করবেন না । পরিবর্তে কমান্ড লাইনে সুস্পষ্টভাবে তালিকাভুক্তদের মধ্যে কেবল একটি ম্যাচিং ফাইল অনুসন্ধান করুন।

আপনার উদাহরণগুলিতে কমান্ড লাইনে কেবল ডিরেক্টরিগুলি তালিকাভুক্ত করা হয়েছিল এবং সেগুলির কোনওটির নাম দেওয়া হয়নি file1। অতএব, কোন আউটপুট।

সাধারণভাবে, অনেক ফাইল এবং ডিরেক্টরি কমান্ড লাইনে নামকরণ করা যায়। উদাহরণস্বরূপ, আমরা এখানে findকমান্ড লাইনে 11 টি ফাইল এবং ডিরেক্টরি সহ একটি কমান্ড চেষ্টা করি :

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

ওভারল্যাপিং পাথ

বিবেচনা:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

স্পষ্টতই, রমেশের নির্দেশ অনুসারে, findকমান্ড লাইনে বর্ণিত প্রতিটি পথ অনুসরণ করবে এবং পাথগুলি একই ফাইলের দিকে পরিচালিত করবে . fileএমনকি পাথগুলি যেমন যথাযথ নকল, ততই মিলগুলি সন্ধান করবে file1 file1


ধন্যবাদ। তবে আমি কীভাবে কমান্ড লাইনে কিছু ফাইলের নাম পাস করতে পারি?
রমেশ

ভাল যুক্তি. আমার আপডেট হওয়া উত্তরটি দেখুন। প্রথম পরীক্ষার আগে আপনি যতটা চান রাখতে পারেন। উদাহরণস্বরূপ: find * -maxdepth 0 -name "file1"*কমান্ড লাইন বর্তমান ডিরেক্টরির মধ্যে প্রতিটি ফাইল তালিকা প্রস্তুত করা।
1024

1
@ রামেশ উত্তরটি আরও আপডেট হয়েছে, আমি আশা করি, আরও ভাল ব্যাখ্যা এবং উদাহরণ দিয়েছি।
1024

আবার ধন্যবাদ. আমি আপনার সর্বশেষ আপডেট থেকে আরও বিশদ সঙ্গে আমার প্রশ্ন আপডেট।
রমেশ

@ রমেশ আমি এটি নথিভুক্ত দেখতে পাচ্ছি না তবে আমি আপনার মতো আচরণটি দেখতে পাচ্ছি: findকমান্ড লাইনের প্রতিটি পথের দিকে তাকান এবং প্রতিলিপিগুলি এমনকি প্রতিটির সাথে মিলের প্রতিবেদন করে।
1024
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.