আমি নিম্নলিখিত কমান্ডটি চালাচ্ছি, তবে এটি পুনরাবৃত্তভাবে সম্পাদিত হয় না:
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