উত্তর:
findমৃত্যুদন্ড কার্যকর হওয়ার আগে শেল দ্বারা একটি অব্যবহৃত গ্লোব প্রসারিত হবে । ( ম্যানুয়ালটিতে ফাইলের নাম প্রসার দেখুন ))
তাই বলে:
find . -name *.pyc -delete
আসলে কার্যকর করা হবে:
find . -name file1.pyc file2.pyc file3.pyc -delete
ধরে নিলাম বর্তমান ডিরেক্টরিতে 3 .pyc ফাইল রয়েছে এবং এর পরিবর্তে একটি ত্রুটি ঘটেছে।
একটি ব্যাকস্ল্যাশ শেলটি গ্লোবকে পাস করে তোলে find, অর্থাৎ এটি *.pycউদ্ধৃত হয়েছে এমনভাবে কাজ করে ।
আদর্শভাবে, আপনি একটি গ্লোব উদ্ধৃত করা উচিত:
find . -name '*.pyc' -delete
আপনার শেল findকমান্ড দেওয়ার আগে , এটি বিস্তৃত করবে । এটি করার ফলে এটি বিশেষ অক্ষরগুলি (বা, বিশেষ অর্থ সহ অক্ষর) *প্রসেসও করে , যেখানে একটি ওয়াইল্ডকার্ড - একটি গ্লোববিং চরিত্র। এটি তথাকথিত ফাইল নাম সম্প্রসারণ।
বলুন আপনার ডিরেক্টরিতে দুটি ফাইল রয়েছে:
foo.pycbar.pycতারপর *.pycউভয় নাম প্রসারিত হবে। সুতরাং আপনি যদি লিখুন:
find . -name *.pyc -delete
তাহলে শেলটি আসলে কল করবে:
find . -name foo.pyc bar.pyc -delete
যা খুব একটা বোঝায় না, কারণ আপনার পক্ষে কেবল একটি যুক্তি থাকতে পারে -name। এজন্য শেল দ্বারা ব্যাখ্যা করা থেকে বাঁচতে আপনাকে বিশেষ চরিত্রটি থেকে বাঁচতে হবে। আপনি ব্যাকস্ল্যাশ-পলায়নের মাধ্যমে বা বিকল্পভাবে, এটি উদ্ধৃত করে তা করেন।
findএকটি বিভাগ থাকা উচিতNON-BUGSযা উদাহরণের মতো অনুরূপ কিছু এবং কেন এটি প্রয়োজন তার ব্যাখ্যা।