zsh: একটি প্যাটার্ন থেকে ফাইলগুলি বাদ দেওয়া


18

বলুন যে আমার কাছে নিম্নলিখিত ফাইল রয়েছে:

|-- bar
`-- foo
    |-- type_A_1
    |-- type_A_2
    |-- type_B_1
    |-- type_B_2
    |-- type_B_xx
    |-- type_B_xx
    `-- something_else

আমি নিম্নলিখিত কমান্ড ভেবেছি

print -l foo/*~{type_B*}

প্রিন্ট হবে সবকিছু অধীনে foo ছাড়া যে দিয়ে শুরু type_Bকিন্তু এটা না, পরিবর্তে সবকিছু foo বিন্যাস অধীনে ছাপে না:

foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else

আমিও চেষ্টা print -l foo/*~type_Bকরেছি এবং একই জিনিস পেয়েছি।

কীভাবে ব্যতিক্রমী ওয়াইল্ডকার্ড ~zsh এ কাজ করে?

উত্তর:


10

আপনাকে ডিরেক্টরিটি ব্যতিক্রমের মধ্যে অন্তর্ভুক্ত করতে হবে: print -l foo/*~foo/type_A*বা print -l foo/*~{foo/type_A*}

আপনি যদি চান, আপনি একটি ওয়াইল্ডকার্ড দ্বারা ডিরেক্টরিটি প্রতিস্থাপন করতে পারেন: print -l foo/*~*/type_A*


ধন্যবাদ! দ্বিতীয় প্যাটার্ন সম্পর্কে, প্যাটার্নটি কীভাবে foo/*~*/type_A*কাজ করে তা বোঝাতে আপনার কি আপত্তি আছে ? দ্বিতীয়টি কি কার্যকরী ডিরেক্টরিের অধীনে প্রতিটি ফোল্ডারে *প্রসারিত হয় , বা এটি কেবলমাত্র প্রসারিত করার জন্য যথেষ্ট স্মার্ট ? foo
অ্যামিলিও ওয়াজকেজ-রেইনা

@roseck এটা (যখন আপনি চালাতে উদাহরণস্বরূপ সত্যিই দ্রুত মনে হয় কারণ print *~**/*/directory) আমি অনুমান এটি প্রথম প্রথম প্যাটার্ন প্রসারিত এবং তারপর সমস্ত মিল যা বর্জন প্যাটার্ন মাপসই করা হবে মুছে ফেলুন।
জোফেল

2
@ গ্রোক নিখুঁতভাবে ~পাঠ্যগত, এটি অংশটি ~সর্বদা যেমন প্রসারিত হয়, তারপরে অংশটি ম্যাচগুলি সরিয়ে ফেলে। Ofজুফেল আরও ভাল পরীক্ষা হবে print /**/*~*: আপনি পর্যবেক্ষণ করতে পারেন যে এটি পুরো গাছকেই পিছনে ফেলেছে , এমনকি এটি কিছু না ছাপিয়ে শেষ করলেও।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আমি ভেবেছিলাম তিনি টাইপ_বি বাদ দিতে চান তবে টাইপ_এ অন্তর্ভুক্ত করতে পারেন।
সিস্টেমেভিচ

সঠিক উত্তর নীচে রয়েছে
অ্যারেন্ডিন

30

^যখন EXTENDED_GLOB চালু থাকে তখন zsh এর গ্লোব অপারেটর থাকে। আপনার বিবৃত পরিস্থিতির জন্য এটি পুরোপুরি উপযুক্ত বলে মনে হচ্ছে:

setopt extendedglob
print -rl foo/^type_A*

এর অর্থ “নিম্নলিখিত প্যাটার্নটির সাথে মিলে যা কিছু মিলবে”, তবে এর প্রভাবটি স্ল্যাশগুলির মধ্যে, বা প্যাটার্নের শুরু এবং প্রথম স্ল্যাশের মধ্যে বা শেষের মধ্যে (এই ক্ষেত্রে যেমন) সীমাবদ্ধ থাকে to স্ল্যাশ এবং প্যাটার্ন শেষ।

আপনি বর্তমানে এর সাথে সক্ষম zsh বিকল্পগুলি দেখতে পারেন :

setopt

এবং এর সাথে EXTENDED_GLOB অক্ষম করুন:

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