উত্তর:
কারণ তুমি কেন দেখতে কারণ গনুহ বিকাশকারীর বেছে নেওয়া হয়েছে একটি "যুক্তিযুক্ত" আচরণ প্রদান যখন কোন পথ দেওয়া হয়। বিপরীতে, পসিএক্স প্যারামিটারটি alচ্ছিক বলে উল্লেখ করে না:find
find
find
উপযোগ যাও recursively থেকে ডিরেক্টরি অনুক্রমের নেমে আসবেন পথ দ্বারা নির্দিষ্ট প্রতিটি ফাইল , একটি বুলিয়ান সম্মুখীন প্রতিটি ফাইলের জন্য OPERANDS বিভাগে বর্ণিত প্রাইমারিতে গঠিত অভিব্যক্তি মূল্যায়নের। প্রতিটি পাথ অপারেন্ডকে সমস্ত ট্রেলিং<slash>
অক্ষর সহ যেমনটি সরবরাহ করা হয়েছিল তেমন মূল্যহীন মূল্যায়ন করা হবে ; শ্রেণীবিন্যাসে সম্মুখীন অন্যান্য ফাইল জন্য সব pathnames সমন্বয়ে গঠিত হইবে সংযুক্তকরণের বর্তমান পথ প্রতীক, একটি<slash>
বর্তমান পথ প্রতীক এক শেষ না করে থাকেন, এবং পথে ফাইলের নাম আপেক্ষিক অপার্যান্ড। আপেক্ষিক অংশে কোনও বিন্দু বা বিন্দু-বিন্দু উপাদান থাকবে না, কোনও পিছনে থাকবে নাঅক্ষর এবং<slash>
পথের উপাদানগুলির মধ্যে একক অক্ষর।
আপনি প্রতিটি জন্য সংক্ষিপ্তসার পার্থক্য দেখতে পারেন। বর্গাকার বন্ধনীগুলিতে GNU এর (যেমনটি প্রচলিত) itemsচ্ছিক আইটেম রয়েছে:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...]
[expression]
যদিও পসিক্স ইঙ্গিত দেয় না যে এটি alচ্ছিক হতে পারে:
find [-H|-L] path... [operand_expression...]
জিএনইউ প্রোগ্রামে এটি সম্পন্ন হয়েছে ftsfind.c
:
যদি (খালি) { / * * আমরা এখানে একটি অস্থায়ী পরিবর্তনশীল ব্যবহার করি কারণ কিছু ক্রিয়া সংশোধন করে অস্থায়ীভাবে পথ। তাই যদি আমরা একটি স্ট্রিং ধ্রুবক ব্যবহার করি, * আমরা একটি coredump পেতে। এর সেরা উদাহরণটি যদি আমরা বলি * "সন্ধান করুন -প্রিন্টফ% এইচ" (নোট, "সন্ধান করুন না। -প্রিন্টফ% এইচ")। * / চর ডিফল্টপথ [2] = ""; রিটার্ন ফাইন্ড (ডিফল্টপথ); }
এবং একটি আক্ষরিক "."
সরলতার জন্য ব্যবহৃত হয়। সুতরাং আপনি একই ফলাফল দেখতে পাবেন
find
এবং
find .
কারণ (এবং পসিএক্স সম্মত হন) প্রদত্ত পাথটি ফলাফলের উপসর্গ করতে ব্যবহার করা হবে (উপরের দিকে মনোনিবেশ করার জন্য দেখুন )।
একটি সামান্য কাজ দিয়ে, কেউ বৈশিষ্ট্যটি কখন যুক্ত করা হয়েছিল তা নির্ধারণ করতে পারে; এটি ১৯৯ "সালে" সন্ধানী "গুলির প্রাথমিক সৃষ্টিতে উপস্থিত ছিল (দেখুন find.c
):
+ /* If no paths are given, default to ".". */
+ for (i = 1; i < argc && strchr ("-!(),", argv[i][0]) == NULL; i++)
+ process_top_path (argv[i]);
+ if (i == 1)
+ process_top_path (".");
+
+ exit (exit_status);
+}
৩.৮ সন্ধানের চেঞ্জলগ থেকে এটি দৃশ্যত ছিল
Sat Dec 15 19:01:12 1990 David J. MacKenzie (djm at egypt)
* find.c (main), util.c (usage): Make directory args optional,
defaulting to "."
সাধারণত, কেউ ফাইলগুলির পোস্ট-প্রসেসিং করে এবং সে ক্ষেত্রে ফাইলের নামটি শুরু করার একটি বিশাল সুবিধা হতে পারে ./
। বিশেষত, যদি কোনও ফাইলের নাম দিয়ে শুরু হয় -
, পরবর্তী কমান্ডটি সেই ফাইলের নামের কোনও বিকল্প ব্যাখ্যা করতে পারে। ./
যে এড়ানো।
উদাহরণস্বরূপ, এই ফাইলগুলির সাথে একটি ডিরেক্টরি বিবেচনা করুন:
$ ls
--link --no-clobber
এখন, কল্পনা করুন যে এই কমান্ডটি কীভাবে কাজ করবে যদি ফাইলগুলি নামগুলি ./
সামনে না দিয়ে সরবরাহ করা হত :
$ find -type f -exec cp -t ../ {} +
আমরা find
নিজেই সমস্যাটি বর্ণনা করতে পারি । উপরের মত একই ডিরেক্টরিতে এটি চালানো যাক। নিম্নলিখিত কাজগুলি:
$ find ./*
./--link
./--no-clobber
নিম্নলিখিত ব্যর্থ:
$ find *
find: unknown predicate `--link'
Try 'find --help' for more information.
file
দাবি করে যে ব্যবহারকারী কোনও পথ দেয় (যেমন বিএসডি ওএস এক্সে সন্ধান করে)। সুতরাং আপনার সাধারণত স্পষ্টভাবে কিছু বলার প্রয়োজন find . -type f ...
। সেখান থেকে, সন্ধানের কিছু সংস্করণ (জিএনইউ অনুসন্ধানের মতো) এর জন্য কেবলমাত্র ডিফল্ট হয়ে .
অন্য সব কিছু যেমন রেখে দেয় তা কোনও বড় পদক্ষেপ নয় ।
find *
দেখাচ্ছি না .
কারণ *
তালিকা সব ফাইল এবং ফোল্ডার, কিন্তু বাদ .
। কি echo *
একটি যে ডিরেক্টরিকে শুধুমাত্র একটি বা দুটি ফাইল রয়েছে, এবং আপনি যে দেখতে হবে .
তালিকাভুক্ত নয়। সুতরাং, find *
প্রতিটি ফাইল প্রসারিত কাজ করে। এটি হ'ল যদি আপনি find Desktop/
হোম ডিরেক্টরি থেকে বলেছেন । আপনি আউটপুট হিসাবে দেখতে পাবেনDesktop/foo_bar.txt
find
আচরণ করে states এই কারণেfind
এইভাবে আচরণ করার জন্য ডিজাইন করা হয়েছিল এমন অন্তর্নিহিত দাবি সমর্থন করার জন্য আপনার কাছে কোনও অনুমোদনমূলক রেফারেন্স তথ্য রয়েছে ?
find
কমান্ড চাহিদা পথ (গুলি) অনুসন্ধান ব্যবহার করুন। আমরা যদি কোনও নির্দিষ্ট না করি তবে এটি বর্তমান ডিরেক্টরিটি ( .
) এর প্রারম্ভিক পয়েন্ট হিসাবে ব্যবহার করে । একইভাবে, আপনি যদি পথটি পাস করেন, উদাহরণস্বরূপ /tmp
, এটি এটিকে তার প্রারম্ভিক পয়েন্ট হিসাবে বিবেচনা করে। এবং তাই ফলাফল।
যদি বর্তমান ডিরেক্টরি:
$ find
or
$ find .
output:
./file1
./file2
./file3
/tmp
ডিরেক্টরি যদি :
$ find /tmp
output:
/tmp/file4
/tmp/file5
abc
বর্তমান ডিরেক্টরি অধীন ডিরেক্টরি যদি :
$ find abc
output:
abc/file6
abc/file7
যদি বর্তমান ডিরেক্টরি অধীন একাধিক ডিরেক্টরি:
$ find fu bar
output:
fu/file10
fu/file11
bar/file8
bar/file9
find
যে কোনও কিছুর অনুসন্ধান করার জন্য একটি পথ প্রয়োজন এবং এটি বর্তমান ডিরেক্টরিতে ডিফল্ট। প্রশ্নটি হ'ল কেন এটি ./
যখন শীর্ষস্থানটি মুদ্রণ করে file.txt
ঠিক তখনই ./file.txt
।
আপনি যদি কোনও পাথ নির্দিষ্ট না করেন, find
কমান্ডটি ${PWD}
পথ হিসাবে ধরে নেয় এবং এটির আউটপুট প্রিন্ট করে। ব্যবহারকারী পথটি নির্দিষ্ট করে না এমনভাবে find
কাজ করে না । এবং অনুসন্ধান সর্বদা ডিফল্টরূপে পাথের সাথে কাজ করে।
/tmp
তা $PWD
হয় /tmp
না ./
।
/tmp
পূর্ববর্তী দেখতে চান , কমান্ডটি চালান find /tmp
যদি আপনি কোনও পথ নির্দিষ্ট না করেন তবে এটি সর্বদা বর্তমান ডিরেক্টরি হবে, যা হ'ল./
/tmp
। এটা যে এটি হতে পারে না $PWD
।
${PWD}
find .
, find $PWD
এবং find
(একটি পথ করে, আপনাকে আপনার খোঁজ এটিকে সমর্থন করে তাহলে)।
find *
।