“Rm -rf ফাইল নাম [co]” কমান্ডে [co] এর অর্থ কী?


16

ধরা যাক আমার দুটি ফাইল রয়েছে /tmp:

root@ubuntu:~# touch /tmp/hello.{pyc,py}

root@ubuntu:~# ls /tmp/
hello.py  hello.pyc

এখন, rm -rf[co] অপশন সহ কমান্ড রান করুন |

root@ubuntu:~# rm -rf /tmp/hello.py[co]

root@ubuntu:~# ls /tmp/
hello.py

এখানে কেউ কি দয়া করে ব্যাখ্যা করতে পারেন? [co]প্যারামিটারটি কী ? অন্যান্য এক্সটেনশনের জন্য কীভাবে আমরা এটি কার্যকর করতে পারি? বলুন আমার কাছে আছে foo.jsএবং foo.coffeeফাইলগুলি, আমরা কী rm -rf /tmp/foo.coffe[co]মুছে ফেলার মতো কিছু করতে পারি /tmp/foo.js?


8
সেখানে কোনও প্রয়োজন -rfনেই, কারণ সেগুলি না ডিরেক্টরি ( --recursive), বা অলিখিত ( --force) নয়।
দেলতব

13
এর প্রয়োজন নেই -rfএবং মূল হিসাবে কাজ করার দরকার নেই। বিশেষত যদি প্রশ্নযুক্ত বিষয়গুলি জড়িত থাকে rm -rf
টেরডন

বলছি, সমস্যাটি ব্যাখ্যা করার জন্য এটির নমুনা আদেশ commands আসল প্রশ্নটি ছিল [co]শেল গ্লোব সম্পর্কে । ধন্যবাদ।
aneshehep

8
@ আনিশেপ যদি কেউ বন্দুকের পিপাটি দেখছে এবং কীভাবে এটি পরিষ্কার করতে চাইছে, আপনি কি প্রথমে তাদের পিপাটি নীচে নেওয়ার বিষয়ে সতর্ক করেছেন বা কীভাবে এটি পরিষ্কার করবেন তা তাদের বলছেন?
ডানকান এক্স সিম্পসন

উত্তর:


34

[co]rmকমান্ডের প্যারামিটার নয় - এটি একটি শেল গ্লোব যা সেট থেকে একক অক্ষরের সমান একটি প্যাটার্নের সাথে মেলে [co]- অন্য কথায় এটি ফাইলের নামের সাথে একটি cবা oশেষের সাথে মেলে । থেকে man bash:

[...]  Matches any one of the enclosed characters

উভয় মেলে foo.coffeeএবং foo.js, যেহেতু প্রত্যয় একেবারেই কোনও সাধারণ সাবস্ট্রিং থাকে না, সেরা আপনিই করতে পারে foo.*যা মেলে দিবে কোন ফাইলের নাম শুরু সঙ্গে foo.পরিবর্তে আপনি ব্যবহার করতে পারে বক্রবন্ধনী সম্প্রসারণ যেমন

rm foo.{coffee,js}

হ্যাঁ বুঝেছি। আমি বশ মধ্যে মূল ধারণাটি মিস করেছি;)। আপনাকে ধন্যবাদ :)
আনিসেপ

7
অনুসন্ধানের বিন্যাস মত [abc]বা *হবে ফাইলের জন্য অনুসন্ধান যখন {}না। / echo nya[ab]; echo nya{a,b}touch nyaaecho nya[ab]; echo nya{a,b}
টেম্পে যান

16

এটি প্যারামিটার নয় বরং বর্ণগুলির সংগ্রহ (বা একটি "শেল গ্লোব")। একই ধরনের:

rm -rf /tmp/hello.py[co]

এটার মতই

rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo

অনুরূপ ...

rm -rf /tmp/hello.py[c-o]

নিম্নলিখিতটি ASCII ক্রম /tmp/hello.pycসহ এবং সমস্ত কিছু মুছবে /tmp/hello.pyo

rm -rf /tmp/hello.py[ab][cd]

সরিয়ে ফেলবে ...

rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd

বলুন, আমার কাছে foo.js এবং foo.c کافی ফাইল রয়েছে, আমরা কী rm -rf /tmp/foo.coffe[co]মুছে ফেলার মতো কিছু করতে পারি /tmp/foo.js

আপনি বরং অভিনব পদ্ধতি তৈরি করতে পারেন তবে সেই 2 টি ফাইলের জন্য আমি কেবল তাদের প্রত্যেককে 1 টি কমান্ড দিয়ে সরিয়ে ফেললাম। আর একটি উদাহরণ to 2 টি ফাইলের কাছে যতটা সম্ভব বন্ধ করা ...

rm /tmp/foo.[cj]*

এই মত ফাইল সরানো হবে ...

rm /tmp/foo.c*
rm /tmp/foo.j*

সুতরাং এটি কেবল এই 2 টি ফাইলের চেয়ে অনেক বেশি অন্তর্ভুক্ত করবে।


2
আমি যদি ভুল বোঝাবুঝি না করি তবে আপনি rm -rfসমস্ত ম্যাচগুলির সাথে একটির অনুরোধ পাবেন, একটি ম্যাচের সাথে প্রত্যেকের জন্য অনেকগুলি অনুরোধ নয়।

1
হ্যাঁ. তবে আরএম এর অভিপ্রায়টি আমি যুক্ত করি নি। এগুলি কেবল এটি দেখানোর জন্য যে সমতুল্য টাইপ করার দরকার হবে ;-)
রিনজউইন্ড

1

এটা একটা শেল উল্লিখিত glob, ওয়াইল্ডকার্ড অনুরূপ *এবং ?... ব্যাশ এ, ফাইলের নাম প্যাটার্ন *.[co]সব ফাইলের নামের সাথে ফিনিস সাথে মিলে যায় .cবা .o

*.[co]বনাম *.c *.oবা এর সাথে পার্থক্যটি *.{c,o}হ'ল ডিরেক্টরিটিতে *.oকোনও .oফাইল উপস্থিত না থাকলে দুটি উত্তরোত্তর নমুনা ডামিতে প্রসারিত হবে , যদিও *.[co]সংস্করণটি নেই won't

শেল গ্লোবগুলি অ-কেস-সংবেদনশীল উপায়ে ফাইল অপারেশন করার জন্য দরকারী। উদাহরণস্বরূপ, যদি আপনি ফাইলের নামের যে শেষ সঙ্গে ফাইল একটি গুচ্ছ আছে jpg, JPG, Jpg, JPg, ইত্যাদি ... এবং আপনি তাদের সব সরাতে চান, আপনি কি করতে পারেন:

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