কোনও পথ না দিলে কেন নেতৃস্থানীয় './' মুদ্রণ সন্ধান করে?


13

যদি কোনও পথ না দেওয়া হয় তবে ফলাফলের findএকটি শীর্ষস্থানীয় মুদ্রণ কেন ./?

$ find
./file1
./file2
./file3

এটি মুদ্রণ না করার কারণ কী?

$ find
file1
file2
file3

উত্তর:


16

কারণ তুমি কেন দেখতে কারণ গনুহ বিকাশকারীর বেছে নেওয়া হয়েছে একটি "যুক্তিযুক্ত" আচরণ প্রদান যখন কোন পথ দেওয়া হয়। বিপরীতে, পসিএক্স প্যারামিটারটি 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 "."

11

সাধারণত, কেউ ফাইলগুলির পোস্ট-প্রসেসিং করে এবং সে ক্ষেত্রে ফাইলের নামটি শুরু করার একটি বিশাল সুবিধা হতে পারে ./। বিশেষত, যদি কোনও ফাইলের নাম দিয়ে শুরু হয় -, পরবর্তী কমান্ডটি সেই ফাইলের নামের কোনও বিকল্প ব্যাখ্যা করতে পারে। ./যে এড়ানো।

উদাহরণস্বরূপ, এই ফাইলগুলির সাথে একটি ডিরেক্টরি বিবেচনা করুন:

$ 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.

1
এটা বোঝা যায়। তবে তারপরে প্রশ্ন রয়েছে কেন এটি 'প্রিপেন্ড' করে না। যখন আপনি চালান find *
nr

@nr ভাল পয়েন্ট। আমি প্রত্যাশা করি যে এটি একরকম historicalতিহাসিক সামঞ্জস্যের জন্য সেভাবে আচরণ করে। কেন এটি অনাকাঙ্ক্ষিত আচরণ এটির একটি উদাহরণ আমি উত্তরে যুক্ত করেছি।
1024

3
কিছু সংস্করণ file দাবি করে যে ব্যবহারকারী কোনও পথ দেয় (যেমন বিএসডি ওএস এক্সে সন্ধান করে)। সুতরাং আপনার সাধারণত স্পষ্টভাবে কিছু বলার প্রয়োজন find . -type f ...। সেখান থেকে, সন্ধানের কিছু সংস্করণ (জিএনইউ অনুসন্ধানের মতো) এর জন্য কেবলমাত্র ডিফল্ট হয়ে .অন্য সব কিছু যেমন রেখে দেয় তা কোনও বড় পদক্ষেপ নয় ।
ilkkachu

1
কারণ find *দেখাচ্ছি না .কারণ *তালিকা সব ফাইল এবং ফোল্ডার, কিন্তু বাদ .। কি echo *একটি যে ডিরেক্টরিকে শুধুমাত্র একটি বা দুটি ফাইল রয়েছে, এবং আপনি যে দেখতে হবে .তালিকাভুক্ত নয়। সুতরাং, find *প্রতিটি ফাইল প্রসারিত কাজ করে। এটি হ'ল যদি আপনি find Desktop/হোম ডিরেক্টরি থেকে বলেছেন । আপনি আউটপুট হিসাবে দেখতে পাবেনDesktop/foo_bar.txt
সের্গি কলডিয়াজহনি

1
@ জন 1024: আমি বিশ্বাস করি যে মির্গেশ এবং থমাস ডিকি এই প্রশ্নের সঠিক উত্তর দিয়েছেন। এই উত্তরটি কেন এটি সুবিধাজনক যে এটির মতো findআচরণ করে states এই কারণেfind এইভাবে আচরণ করার জন্য ডিজাইন করা হয়েছিল এমন অন্তর্নিহিত দাবি সমর্থন করার জন্য আপনার কাছে কোনও অনুমোদনমূলক রেফারেন্স তথ্য রয়েছে ?
জি-ম্যান 21

4

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
এনআর

1
এটি যে অনুসন্ধান যোগ করে না "। শুরুতে এটি আপনাকে পথ হিসাবে যা দেয় তা যুক্ত করে, এটি "/ টিএমপি" "এবিসি" বা "।" এটি যথাক্রমে সমস্ত মান প্রদান করবে।
মৃগেশ প্রিয়র্ষি

-2

আপনি যদি কোনও পাথ নির্দিষ্ট না করেন, findকমান্ডটি ${PWD}পথ হিসাবে ধরে নেয় এবং এটির আউটপুট প্রিন্ট করে। ব্যবহারকারী পথটি নির্দিষ্ট করে না এমনভাবে findকাজ করে না । এবং অনুসন্ধান সর্বদা ডিফল্টরূপে পাথের সাথে কাজ করে।


1
আমি দেখি. আপনি যদি এটির অধীনে কার্যকর করেন তবে /tmpতা $PWDহয় /tmpনা ./
NR

আপনি যদি /tmpপূর্ববর্তী দেখতে চান , কমান্ডটি চালান find /tmpযদি আপনি কোনও পথ নির্দিষ্ট না করেন তবে এটি সর্বদা বর্তমান ডিরেক্টরি হবে, যা হ'ল./
মেলবারসালান

1
এটি এমন নয় যে আমি পূর্ববর্তী দেখতে চাই /tmp। এটা যে এটি হতে পারে না $PWD
NR

আমার ক্ষমা ${PWD}
চাওয়াটি

2
না, এটি PWD ধরে না D আউটপুট তুলনা করুন find ., find $PWDএবং find(একটি পথ করে, আপনাকে আপনার খোঁজ এটিকে সমর্থন করে তাহলে)।
ইলকচাচু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.