কেন rm * (1) * কোনও ডিরেক্টরিতে সমস্ত ফাইল সরিয়ে দেয়?


47

আমি প্রত্যাশা করেছিলাম যে:

$ rm *(1)*

(1)নামে থাকা সমস্ত ফাইল সরিয়ে ফেলবে । আমি ভৃল ছিলাম. এটি ডিরেক্টরিতে থাকা সমস্ত ফাইল সরিয়ে ফেলে।

কেন?


5
আমি যখনই rmকোনও প্যাটার্নটি ব্যবহার করি echo, প্রকৃত কমান্ড দেওয়ার আগে আমি সর্বদা এটির আগে। অভ্যাসটি আমাকে একাধিকবার বাঁচিয়েছিল (যেহেতু, 6 বছর বা তার বেশি হিসাবে, DEL A: *.*এবং এর মধ্যে পার্থক্যকে বিভ্রান্ত করে DEL *.* A:)।
জারিট

উত্তর:


51

থেকে man bash:

*(pattern-list)
                 Matches zero or more occurrences of the given patterns

আপনার কাছে একটি গ্লোব এক্সপ্রেশন রয়েছে যা শূন্য বা আরও বেশি 1গুলি দিয়ে শুরু হওয়া ফাইলগুলির সাথে মেলে - যা সমস্ত ফাইল।

এই গ্লোব্বিং আচরণটি অক্ষম করার একটি সহজ উপায় হ'ল \প্রথম বন্ধনী থেকে বাঁচা:

rm *\(1\)*

অন্যথায় আপনি shopt -u extglobআচরণটি অক্ষম করতে এবং shopt -s extglobএটি পুনরায় সক্ষম করতে ব্যবহার করতে পারেন :

shopt -u extglob
rm *(1)*
shopt -s extglob

মনে রাখবেন যে স্টিফেন বলেছেন , এটি অক্ষম করে extglobসক্ষম করা bash-completionএটি সম্পূর্ণরূপে ফাংশনগুলি সঠিকভাবে কাজ না করার কারণ হতে পারে।


7
নোট করুন যে extglobডিফল্টরূপে নেই তবে আপনার যদি ইনস্টল ও সক্ষম করা থাকে তবে bash_completion দ্বারা চালু করা হয়। bashএর মতো বিকল্পের স্থানীয় সুযোগ zshনেই।
স্টাফেন চেজেলাস

1
এছাড়াও মনে রাখবেন যে bash-4.3এতে একটি রিগ্রেশন রয়েছে যা *(1)*লুকানো ফাইলগুলি প্রসারিত করে।
স্টাফেন চেজেলাস

পছন্দ করেছেন ধন্যবাদ
বেসিক

2
@ বেসিক, আপনি এখানে যান । চেট এখনও কোন উত্তর দেয়নি।
স্টাফেন চেজেলাস

9

এটি সম্ভবত extglobশেল বিকল্পের সাথে সম্পর্কিত । যদি আমি এটি বন্ধ করি তবে প্যাটার্নটি একটি ত্রুটি বার্তা উত্পন্ন করে:

martin@dogmeat:~$ shopt -u extglob
martin@dogmeat:~$ shopt extglob
extglob         off
martin@dogmeat:~$ echo *(1)*
bash: syntax error near unexpected token `('

আমি যদি এটি চালু করি তবে মনে হয় এটি সমস্ত কিছুর সাথে মেলে। ম্যানপেজটি এই নিদর্শনগুলি নথিভুক্ত করে, আমি মনে করি সেগুলি সম্পর্কিত:

   If the extglob shell option is enabled using the shopt builtin, several
   extended  pattern  matching operators are recognized.  In the following
   description, a pattern-list is a list of one or more patterns separated
   by a |.  Composite patterns may be formed using one or more of the fol
   lowing sub-patterns:

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

আমি এমন কোনও ডকুমেন্টেশন দেখছি না যা উল্লেখ করে যে কোনও শীর্ষস্থানীয় চরিত্র ব্যতীত প্রথম বন্ধনী কী করে। যাইহোক, আপনি প্যারেন্সকে উদ্ধৃত করে সমস্যাটি সমাধান করতে পারেন:

martin@dogmeat ~ % echo *\(1\)*
A(1)b

এছাড়াও, আপনার প্যাটার্নটি ব্যবহার করতে echoবা lsপরীক্ষা করতে প্রথমে যদি আপনি নিশ্চিত যে এটি কাজ করছে :)


এফওয়াইআই: {একটি ধনুর্বন্ধনী, (একটি পেরেন (বা বৃত্তাকার বন্ধনী)।
মাইকেল

আহ, ধন্যবাদ আমি কোনও স্থানীয় ইংরেজী স্পিকার নই তাই আমি তাদের গুলিয়ে ফেলতে চাই :)
মার্টিন ভন উইটইচ

6
ব্রিটিশ ভাষায়: {= কোঁকড়ানো বন্ধনী, (= বৃত্তাকার বন্ধনী, [= বর্গাকার বন্ধনী। আমেরিকান ভাষায়: {= ব্রেস, (= পেরেন, [= বন্ধনী। কিছুটা বিভ্রান্তিকর। আপনার যদি কখনও যা কিছু বলা হয় তা যাচাই করতে হয়, জারগন ফাইল - এএসসিআইআই যথেষ্ট সহায়ক।
মাইকেল

4
@Mikel ধন্যবাদ, আমিও চেক করা এখানে তাই এখন আমি জানতে ফুল বন্ধনী এবং squirrelly বেশী!

ভারতীয় ইংরেজিতে, {একটি ফুল বন্ধনী, [বর্গাকার বন্ধনী এবং (এটি একটি বৃত্তাকার বন্ধনী বা আরও সাধারণভাবে কেবল বন্ধনী হয়। :-)
শ্রীভাতসার আরব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.