আমি নিম্নলিখিত কমান্ডটি চালাচ্ছি, তবে এটি পুনরাবৃত্তভাবে সম্পাদিত হয় না:
find . -name *.java
আমি জানি বর্তমান ডিরেক্টরিতে আরও নীচে জাভা ফাইল রয়েছে তবে এটি কেবল বর্তমান ডিরেক্টরিতে সঞ্চালন করছে find। আমি ওএস এক্স, 10.9 ব্যবহার করছি।
আমি নিম্নলিখিত কমান্ডটি চালাচ্ছি, তবে এটি পুনরাবৃত্তভাবে সম্পাদিত হয় না:
find . -name *.java
আমি জানি বর্তমান ডিরেক্টরিতে আরও নীচে জাভা ফাইল রয়েছে তবে এটি কেবল বর্তমান ডিরেক্টরিতে সঞ্চালন করছে find। আমি ওএস এক্স, 10.9 ব্যবহার করছি।
উত্তর:
সমস্যাটি হল, আপনি নিজের -nameপ্যারামিটারটি উদ্ধৃত করেন নি । পরিবর্তে এটি করুন:
find . -name '*.java'
ব্যাখ্যা
উদ্ধৃতিগুলি ছাড়াই, শেলটি *.javaগ্লোব প্যাটার্ন হিসাবে ব্যাখ্যা করে এবং এটিকে পাস করার আগে গ্লোবের সাথে মেলে এমন কোনও ফাইলের নামের সাথে এটি প্রসারিত করে find। এইভাবে, আপনি যদি foo.javaবর্তমান ডিরেক্টরিতে বলে থাকেন তবে findআসল কমান্ড লাইনটি হ'ল:
find . -name foo.java
যা স্পষ্টতই কেবল বর্তমান ডিরেক্টরিতে ফাইলটি তালিকাভুক্ত করবে (যদি না আপনি গাছের নীচে কিছু একই নামযুক্ত ফাইলগুলি না করেন)।
উদ্ধৃতি গ্লোব সম্প্রসারণকে বাধা দেয় এবং কমান্ড লাইনটিকে findযেমন হয় তেমনটি পাস করে ।
ঘটনাক্রমে, যদি গ্লোবটি মেলতে ব্যর্থ হয় ( *.javaবর্তমান ডিরেক্টরিতে কোনও ফাইল নেই ), আপনার শেলটি কীভাবে মেলে না এমন গ্লোবগুলি পরিচালনা করতে কীভাবে সেট আপ করা হয়েছে তার উপর নির্ভর করে আপনি দুটি আচরণের একটি পেতে পারেন (এটি nullglobবাশ- এর বিকল্প দ্বারা পরিচালিত হয়) , উদাহরণ স্বরূপ):
findতবে (দুর্ঘটনাক্রমে, আপনাকে মনে করবে) সঠিক আচরণ প্রদর্শন করবে।findতবে অভিযোগ করবে যে এটিতে একটি যুক্তি অনুপস্থিত -name।আমার একইরকম পরিস্থিতি ছিল যেখানে আমি উদ্ধৃতিতে নামটির মানটি ঘিরেই ছিলাম, তবে এখনও যে হিটগুলি আমি আশা করেছিলাম তার সবগুলি পাইনি। আমি অনুমান করেছিলাম যে এটি প্রতীকগুলির কারণে এবং যথেষ্ট পরিমাণে নিশ্চিত যে এটি ছিল। আপনি যদি সিমলিংকের মাধ্যমে অনুসন্ধান করতে বাধ্য করতে চান তবে আপনি নিম্নলিখিতটি কমান্ডটি সংশোধন করতে পারেন:
find -L . -name '*.java'
-followতত বেশি পঠিত প্রতিশব্দ -L।
পালাও *
find . -name \*.java