শেল কমান্ড বলতে কি বোঝায়? ?? *


22

নিম্নলিখিত কমান্ড হবে tarসমস্ত "ডট" ফাইল এবং ফোল্ডার:

tar -zcvf dotfiles.tar.gz .??*

আমি নিয়মিত প্রকাশের সাথে পরিচিত , তবে কীভাবে ব্যাখ্যা করব তা বুঝতে পারছি না .??*। আমি মৃত্যুদন্ড কার্যকর করেছি ls .??*এবং tree .??*তালিকাভুক্ত ফাইলগুলি দেখলাম। .উদাহরণস্বরূপ শুরু হওয়া ফোল্ডারগুলির মধ্যে কেন এই নিয়মিত অভিব্যক্তিটি সমস্ত ফাইল অন্তর্ভুক্ত করে ?


1
এছাড়াও দেখুন unix.stackexchange.com/questions/1168/…
লেসমানা

উত্তর:


32

গ্লোবগুলি নিয়মিত প্রকাশ হয় না। সাধারণভাবে, শেলটি কমান্ড লাইনে আপনি টাইপ করা যেকোন কিছু ব্যাখ্যা করার চেষ্টা করবে যা আপনি গ্লোব হিসাবে উদ্ধৃত করেন না। শেলগুলিকে মোটেও রেগুলার এক্সপ্রেশন সমর্থন করার প্রয়োজন হয় না (যদিও বাস্তবে অনেক ফ্যানসিয়ার আরও আধুনিক মানুষ করেন যেমন =~, bash [[কনস্ট্রাক্টে রেজেক্স ম্যাচ অপারেটর )।

.??*একটি উল্লিখিত glob হয়। এটি আক্ষরিক বিন্দু দিয়ে শুরু হওয়া কোনও ফাইল নামের সাথে মিলে যায় ., তার পরে কোনও দুটি (অগত্যা এক নয়) অক্ষর ??এবং তারপরে নিয়মিত প্রকাশের সমতুল্য হয় [^/]*, যেমন 0 বা আরও বেশি অক্ষর নয় /

শেল পথনাম সম্প্রসারণ ( "globbing" জন্য পূর্ণ নাম) পূর্ণ বিবরণ জন্য, দেখুন POSIX বৈশিষ্ট


10
অতিরিক্ত পয়েন্ট: এটি এমন একটি গ্লোব লেখার প্রয়াস যা বিশেষ এন্ট্রিগুলি বাদ দিয়ে কোনও ডিরেক্টরিতে সমস্ত ডটফিলের সাথে মেলে .এবং ..এটির সাথে সাধারণত কিছু করতে চান না। এটি একেবারেই ঠিক নয়; এটি ' .X' নামক কোনও জিনিস বাছাই করে না যেখানে এক্স বিন্দু ছাড়া অন্য কিছু চরিত্র। আমি মনে করি না যে একটি একক গ্লোব লিখতে পারে যা প্রতিটি ডটফিলের সাথে মিলে .এবং এর সাথে মেলে ..তবে আপনি এটি দুটি দিয়ে করতে পারেন: tar zcvf dotfiles.tar.gz .[!.] .??*উদাহরণস্বরূপ।
zwol

@ জ্যাক: স্পষ্টতার জন্য ধন্যবাদ। আমি সে সম্পর্কে একটি মন্তব্য পোস্ট করেছিলাম, তবে এটি মুছে ফেলেছি। ls .?একই ফিরে হিসাবে ls .., যার অর্থ ফোল্ডারে অন্য কোন এন্ট্রি নকশার সাথে মেলে এমন ছিল .?। আমি ব্যতীত অন্য .[^.]সমস্ত .?ফাইলের জন্য করতাম ..
সাব্রেভল্ফি

2
@ সাব্রে ওল্ফি যদি আপনি পসিক্স স্পেসটি মনোযোগ সহকারে পড়েন তবে এটি গ্লোব এবং রেজেক্সের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য: ব্র্যাকেট এক্সপ্রেশনগুলিতে, [^abc]রেজেক্স সিনট্যাক্সের অর্থ গ্লোব [!abc]সিনট্যাক্সের মতোই (যেমন গ্লোবগুলির ^সাথে প্রতিস্থাপন করা হয় !)। [^abc]কোনও গ্লোবে স্টাইল সিনট্যাক্স ব্যবহার করা খুব পোর্টেবল নয় কারণ পসিক্স এর অর্থ কী তা নির্দিষ্ট করে না, তাই কিছু শাঁস রেগেক্সের মতো শব্দার্থক ব্যবহার করে এটি ব্যাখ্যা করে অন্যরা ^কেবল আক্ষরিক চরিত্র হিসাবে বিবেচনা করে ।
jw013

1
@ jw013: বিশদ জন্য ধন্যবাদ। আমাকে অবশ্যই সেই
গ্লোব

1
এটি কেবলমাত্র আমার ক্ষেত্রে ঘটেছিল .[!.]যা tarকমান্ড লাইনে আক্ষরিক হিসাবে ছেড়ে যেতে পারে সাধারণ ক্ষেত্রে যেখানে সেই ধরণের সাথে মেলে এমন কোনও ফাইল নেই। কিছু শেল আপনাকে সেই আচরণ নিয়ন্ত্রণ করতে দেয়, যেমন বাশ সহ, shopt -s nullglobএটি কোনও কিছুর সাথে মেলে না, তবে এটি কমান্ড লাইন থেকে বিলুপ্ত করে দেবে, তবে এটি কোনও সর্বজনীন বৈশিষ্ট্য নয়।
zwol

8

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

ফাইল নামগুলিতে ওয়াইল্ডকার্ডে এই পৃষ্ঠাটি সহায়ক হবে।


-1

অন্যান্য উত্তরগুলিতে যুক্ত করতে, একটি একক ?একটি একক অক্ষরের ফাইলনামে অনুবাদ ??করবে এবং কেবলমাত্র দুটি অক্ষর ইত্যাদি ফাইলের সাথে মিলবে match

[root@mercy testdir_2]# ls
ion  it  r
[root@mercy  testdir_2]# ls ?
r
[root@mercy  testdir_2]# ls ??
it
[root@mercy 1 testdir_2]# ls ???
ion
[root@mercy  testdir_2]#

ডাউনভোটার, আপনি দয়া করে মন্তব্য করতে পারেন? আমি ভুল হলে সংশোধন করে খুশি হবে।
শ্রী

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