আমার খোঁজ কেন পুনরুক্তি হয় না?


65

আমি নিম্নলিখিত কমান্ডটি চালাচ্ছি, তবে এটি পুনরাবৃত্তভাবে সম্পাদিত হয় না:

find . -name *.java

আমি জানি বর্তমান ডিরেক্টরিতে আরও নীচে জাভা ফাইল রয়েছে তবে এটি কেবল বর্তমান ডিরেক্টরিতে সঞ্চালন করছে find। আমি ওএস এক্স, 10.9 ব্যবহার করছি।


@ গিলস: এই প্রশ্নোত্তরটি ডুপের তুলনায় অনেক পরিষ্কার এবং কম স্থানীয় - এটির একটি যদি বন্ধ করে দেওয়া হয় তবে তা অন্যটি।
স্বর্ণলোকগুলি

উত্তর:


88

সমস্যাটি হল, আপনি নিজের -nameপ্যারামিটারটি উদ্ধৃত করেন নি । পরিবর্তে এটি করুন:

find . -name '*.java'

ব্যাখ্যা

উদ্ধৃতিগুলি ছাড়াই, শেলটি *.javaগ্লোব প্যাটার্ন হিসাবে ব্যাখ্যা করে এবং এটিকে পাস করার আগে গ্লোবের সাথে মেলে এমন কোনও ফাইলের নামের সাথে এটি প্রসারিত করে find। এইভাবে, আপনি যদি foo.javaবর্তমান ডিরেক্টরিতে বলে থাকেন তবে findআসল কমান্ড লাইনটি হ'ল:

find . -name foo.java

যা স্পষ্টতই কেবল বর্তমান ডিরেক্টরিতে ফাইলটি তালিকাভুক্ত করবে (যদি না আপনি গাছের নীচে কিছু একই নামযুক্ত ফাইলগুলি না করেন)।

উদ্ধৃতি গ্লোব সম্প্রসারণকে বাধা দেয় এবং কমান্ড লাইনটিকে findযেমন হয় তেমনটি পাস করে ।

ঘটনাক্রমে, যদি গ্লোবটি মেলতে ব্যর্থ হয় ( *.javaবর্তমান ডিরেক্টরিতে কোনও ফাইল নেই ), আপনার শেলটি কীভাবে মেলে না এমন গ্লোবগুলি পরিচালনা করতে কীভাবে সেট আপ করা হয়েছে তার উপর নির্ভর করে আপনি দুটি আচরণের একটি পেতে পারেন (এটি nullglobবাশ- এর বিকল্প দ্বারা পরিচালিত হয়) , উদাহরণ স্বরূপ):

  1. মেলে না এমন একটি গ্লোব যদি শেল দ্বারা প্রসারিত না হয়, findতবে (দুর্ঘটনাক্রমে, আপনাকে মনে করবে) সঠিক আচরণ প্রদর্শন করবে।
  2. মেলে না এমন একটি গ্লোব যদি শেল দ্বারা খালি স্ট্রিংয়ে প্রসারিত হয় findতবে অভিযোগ করবে যে এটিতে একটি যুক্তি অনুপস্থিত -name

20

আমার একইরকম পরিস্থিতি ছিল যেখানে আমি উদ্ধৃতিতে নামটির মানটি ঘিরেই ছিলাম, তবে এখনও যে হিটগুলি আমি আশা করেছিলাম তার সবগুলি পাইনি। আমি অনুমান করেছিলাম যে এটি প্রতীকগুলির কারণে এবং যথেষ্ট পরিমাণে নিশ্চিত যে এটি ছিল। আপনি যদি সিমলিংকের মাধ্যমে অনুসন্ধান করতে বাধ্য করতে চান তবে আপনি নিম্নলিখিতটি কমান্ডটি সংশোধন করতে পারেন:

find -L . -name '*.java'

সিমলিংকগুলিও আমার ইস্যু ছিল। যতক্ষণ আপনি এটিকে অন্যান্য প্যারামের সামনে রাখেন -followতত বেশি পঠিত প্রতিশব্দ -L
নুমেনন

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