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