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


234

আমি একটি কঠিন সময় পেয়ে হচ্ছে খোঁজ বর্তমান ডিরেক্টরির মধ্যে ম্যাচ সেইসাথে তার সাবডিরেক্টরি জন্য চেহারা।

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

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

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


4
রেকর্ডের জন্য, findএর msysgit এই ত্রুটি নিক্ষেপ করা হতে পারে, যদি না আপনি কোট দিয়ে প্যাটার্ন ঘিরে: find . -name "*test.c"। (আপনি যদি উইন্ডোজের চেয়ে আলাদা পছন্দ করেন find.exeএবং
সেমিডি

উত্তর:


392

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

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

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

find . -name '*test.c'

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


15
উদাহরণস্বরূপ, আপনি যদি দেখতে পান তবে কী ঘটছে তা দেখতে পাচ্ছেন echo *test.c... ফলাফলটি ওয়াইল্ডকার্ডকে প্রসারিত করে প্রতিধ্বনিত হবে না, তবে শেল নিজেই। সহজ পাঠটি হ'ল যদি আপনি ওয়াইল্ডকার্ড ব্যবহার করেন তবে ফাইলস্পেকটি উদ্ধৃত করুন :-)
ক্রিস জে

এই বিভিন্ন সঙ্গে আমাকে সাহায্য করার জন্য ধন্যবাদ। find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ওয়েবে যেমন পাওয়া যায় তেমন চেষ্টা করেছি এবং "পাথ অবশ্যই প্রকাশের আগে অবশ্যই" এর সাথে দেখা হয়েছিল। সমস্যাটি ছিল উদ্ধৃতি চিহ্নগুলি খুব "স্মার্ট"। আমি কমান্ডটি পুনরায় টাইপ করেছি, যার ফলে উদ্ধৃতিগুলি প্রতিস্থাপন করা হয়েছে, এবং এটি দৌড়ে গেল।
স্মান্ডোলি

2
কোনও কারণে একক উদ্ধৃতি আমার পক্ষে কাজ করেনি। আমাকে ডাবল কোট ব্যবহার করতে হয়েছিল। ¯ \ _ (ツ) _ / ¯
প্ল্যানকি

ওয়াইল্ডকার্ড অনুসন্ধানের জন্য একক উদ্ধৃতি ব্যাসিবক্স এবং জিএনইউতে কাজ করেছে find- যদি একটি ওয়াইল্ডকার্ড ব্যবহার করে *.$variableআপনার ডাবল উদ্ধৃতি প্রয়োজন।
স্টুয়ার্ট কার্ডাল

@ প্ল্যাঙ্কি: আমি শেল স্ক্রিপ্ট ফাইলে ফাইলটি খুঁজে পাই, নাম 'রাইটওলক' রাখি তবে এতে এই ত্রুটি বার্তা রয়েছে। তবে আমি কনসোলে টাইপ করলে এটি কাজ করে। কেউ জানে কেন?
স্কট চু

28

যা ঘটছে তা হ'ল শেলটি "* test.c" ফাইলের তালিকায় প্রসারিত করছে। নক্ষত্রটি পালানোর চেষ্টা করুন:

find . -name \*test.c

# গিটব্যাশটি উইন্ডোতে গিট ব্যাশের সাথে আমার জন্য সমাধান ছিল, এমনকি প্যাটার্নটি উদ্ধৃত করার সময়find . -name '*txt'
একটি আলাদা বেন

17

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

find . -name '*test.c'

13

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

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

0

আমি এই প্রশ্নটি জুড়ে এসেছি যখন আমি একাধিক ফাইলের নামগুলি সন্ধান করার চেষ্টা করছিলাম যা @ ক্রিস জে এর উত্তরে বর্ণিত নিয়মিত অভিব্যক্তির সাথে আমি একত্রিত করতে পারিনি, এখানে আমার পক্ষে কী কাজ করেছে

find . -name one.pdf -o -name two.txt -o -name anotherone.jpg

-oবা -orযৌক্তিক হয়। দেখুন Gnu.org উপর ফাইন্ডিং ফাইল আরও তথ্যের জন্য।

আমি এটি সাইগওয়িনে চালাচ্ছিলাম।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.