linux - "খুঁজে বের করুন: পাথগুলি অবশ্যই অভিব্যক্তিটির আগে অবশ্যই থাকতে হবে:" আমি কিভাবে একটি পুনরাবৃত্তিমূলক অনুসন্ধান নির্দিষ্ট করব যা বর্তমান ডিরেক্টরিতে ফাইলগুলিও খুঁজে পায়?




bash find (3)

বর্তমান ডিরেক্টরি এবং এর সাবডিরেক্টরিগুলিতে মিল খোঁজার জন্য আমার হার্ড টাইম হচ্ছে।

যখন আমি রান find *test.c এটি শুধুমাত্র বর্তমান ডিরেক্টরির মধ্যে ম্যাচ দেয়। (সাবডিরেক্টরিগুলিতে দেখায় না)

আমি find . -name *test.c চেষ্টা করি find . -name *test.c find . -name *test.c আমি একই ফলাফল আশা করি, কিন্তু পরিবর্তে এটি আমাকে শুধুমাত্র একটি উপ-ডিরেক্টরীতে থাকা মিল দেয়। যখন এমন ফাইল থাকে যা কাজ নির্দেশকের সাথে মিলবে, তখন এটি আমাকে দেয় find: paths must precede expression: mytest.c

এই ত্রুটিটির অর্থ কী, এবং আমি বর্তমান ডিরেক্টরি এবং এর উপ-নির্দেশিকাগুলির উভয় মিলগুলি কীভাবে পেতে পারি?


উদ্ধৃতিতে এটি করার চেষ্টা করুন:

find . -name '*test.c'

উদ্ধৃতিতে এটি চেষ্টা করার চেষ্টা করুন - আপনি শেলের ওয়াইল্ডকার্ড সম্প্রসারণে চলমান হচ্ছেন, তাই আপনি যা সন্ধান করতে যাচ্ছেন তা আপনি দেখতে পাবেন:

find . -name bobtest.c cattest.c snowtest.c

... সিনট্যাক্স ত্রুটি কারণ। সুতরাং পরিবর্তে এই চেষ্টা করুন:

find . -name '*test.c'

আপনার ফাইল অভিব্যক্তিটির চারপাশে একক উদ্ধৃতি চিহ্ন লক্ষ্য করুন - এটি আপনার ওয়াইল্ডকার্ডগুলি প্রসারিত শেল (ব্যাশ) বন্ধ করবে।


ম্যানুয়াল থেকে:

NON-BUGS         

   Operator precedence surprises
   The command find . -name afile -o -name bfile -print will never print
   afile because this is actually equivalent to find . -name afile -o \(
   -name bfile -a -print \).  Remember that the precedence of -a is
   higher than that of -o and when there is no operator specified
   between tests, -a is assumed.

   paths must precede expression error message
   $ find . -name *.c -print
   find: paths must precede expression
   Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]

   This happens because *.c has been expanded by the shell resulting in
   find actually receiving a command line like this:
   find . -name frcode.c locate.c word_io.c -print
   That command is of course not going to work.  Instead of doing things
   this way, you should enclose the pattern in quotes or escape the
   wildcard:
   $ find . -name '*.c' -print
   $ find . -name \*.c -print





find