`ফাইন্ড`-এ তারকাচিহ্নের আগে ব্যাকস্ল্যাশ কেন?


9

এই আদেশে:

find . -name \*.pyc -delete

কেন আগে একটি ব্যাকস্ল্যাশ প্রয়োজন *.pyc?


ম্যান পেজের জন্য findএকটি বিভাগ থাকা উচিত NON-BUGSযা উদাহরণের মতো অনুরূপ কিছু এবং কেন এটি প্রয়োজন তার ব্যাখ্যা।
ব্রায়ান

উত্তর:


19

findমৃত্যুদন্ড কার্যকর হওয়ার আগে শেল দ্বারা একটি অব্যবহৃত গ্লোব প্রসারিত হবে । ( ম্যানুয়ালটিতে ফাইলের নাম প্রসার দেখুন ))

তাই বলে:

find . -name *.pyc -delete

আসলে কার্যকর করা হবে:

find . -name file1.pyc file2.pyc file3.pyc -delete

ধরে নিলাম বর্তমান ডিরেক্টরিতে 3 .pyc ফাইল রয়েছে এবং এর পরিবর্তে একটি ত্রুটি ঘটেছে।

একটি ব্যাকস্ল্যাশ শেলটি গ্লোবকে পাস করে তোলে find, অর্থাৎ এটি *.pycউদ্ধৃত হয়েছে এমনভাবে কাজ করে ।

আদর্শভাবে, আপনি একটি গ্লোব উদ্ধৃত করা উচিত:

find . -name '*.pyc' -delete

@RamRachum, তবে টাইপ করার সময় আরও চরিত্র।
পল ড্রাগার

1
@ পলড্রেপার পঠনযোগ্য এবং ভুলের প্রবণতা কম> একটি কীস্ট্রোকের দ্বারা সংক্ষিপ্ত
ডোরকনব

একক উদ্ধৃতিগুলি হ'ল উপায়। আমি কখনও ভাবিনি যে আপনি এভাবে ব্যাকস্ল্যাশ ব্যবহার করতে পারবেন ...
ফ্লোরিস

4

আপনার শেল findকমান্ড দেওয়ার আগে , এটি বিস্তৃত করবে । এটি করার ফলে এটি বিশেষ অক্ষরগুলি (বা, বিশেষ অর্থ সহ অক্ষর) *প্রসেসও করে , যেখানে একটি ওয়াইল্ডকার্ড - একটি গ্লোববিং চরিত্র। এটি তথাকথিত ফাইল নাম সম্প্রসারণ।

বলুন আপনার ডিরেক্টরিতে দুটি ফাইল রয়েছে:

  • foo.pyc
  • bar.pyc

তারপর *.pycউভয় নাম প্রসারিত হবে। সুতরাং আপনি যদি লিখুন:

find . -name *.pyc -delete

তাহলে শেলটি আসলে কল করবে:

find . -name foo.pyc bar.pyc -delete

যা খুব একটা বোঝায় না, কারণ আপনার পক্ষে কেবল একটি যুক্তি থাকতে পারে -name। এজন্য শেল দ্বারা ব্যাখ্যা করা থেকে বাঁচতে আপনাকে বিশেষ চরিত্রটি থেকে বাঁচতে হবে। আপনি ব্যাকস্ল্যাশ-পলায়নের মাধ্যমে বা বিকল্পভাবে, এটি উদ্ধৃত করে তা করেন।

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