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


12

ধরা যাক আমার কাছে এ 1, এ 2, এ 3, বি 1, বি 2, বি 3 ফাইলের একটি ডিরেক্টরি রয়েছে। আমি কেবল সেই ফাইলগুলির সাথে মিল করতে চাই যা দিয়ে শুরু হয় aতবে এতে না থাকে 3। আমি চেষ্টা করেছিলাম ls -I "*3" *a*কিন্তু এটি ফিরে আসে a1 a2 a3, যদিও আমি এটি মেলে না চাই a3। এটি দিয়ে কি সম্ভব ls?


আকর্ষণীয় বিবিধ উত্তরগুলি এখানে, তবে কেন এলএস-আমি '* 3' এ * ব্যর্থ হবে তার একটি ব্যাখ্যা সংশোধন করবে। এবং / বা কেন শেলের গ্লোববেড তালিকাকে পরবর্তীতে এলএস-এ অগ্রাহ্য করা স্যুইচ দ্বারা ফিল্টার করা হচ্ছে না?
থিওফ্রাস্টাস

ম্যান পেজটি -আই বিকল্প সম্পর্কে বলেছেন: do not list implied entries matching shell PATTERNতবে এটি নিহিত বলতে কী বোঝায় তা ব্যাখ্যা করে না , তবে আমি অনুমান করছি এটি কেবলমাত্র lsগ্লোব বিস্তারের দ্বারা প্রাপ্ত ফাইলগুলিতে প্রযোজ্য - এবং lsপ্রসারিত হয় না a*, শেলটি এটি করে ।
মারে জেনসেন

উত্তর:


14

শুধু:

shopt -s extglob  
ls a!(*3*)
  • shopt -s extglob সক্রিয় বর্ধিত গ্লোববিং।
  • a শুরুর সাথে মেলে a
  • !()ম্যাচের ভিতরে ()...
    • *3*যা 3এবং এর আগে বা পরে কিছু আছে।

$ touch 1 2 3 a1 a2 a3 b1 b2 b3 aa1 aa2 aa3 a2a a3a
$ ls a!(*3*)
a1  a2  a2a  aa1  aa2

1
এফওয়াইআই, প্রয়োজনset -s extglob
ব্রায়ান

@ ব্রায়ান হ্যাঁ, সবেমাত্র লক্ষ্য করেছেন cha
বিশৃঙ্খলা

8

বিদ্যমান উত্তরগুলি গ্লোবগুলির সাথে এটি করার সর্বোত্তম উপায়টি ভালভাবে বর্ণনা করে; আমি এটিকে অন্তর্ভুক্ত করব কারণ বেশিরভাগ ক্ষেত্রেই, findআপনি যদি স্ক্রিপ্টিং বা আরও প্রক্রিয়াজাত করতে চান তবে একটি ভাল বিকল্প:

$ find . -maxdepth 1 -name 'a*' -not -name '*3*'
./a1
./a2

আপনি xargsসহজ ক্রিয়াকলাপের জবাবটি , বা while readআরও জটিল জিনিসের জন্য একটি লুপ খাওয়াতে পারেন ।


4

একটি সহজ উপায়

  • মেলে এমন সমস্ত ফাইলের তালিকা করতে a*
  • তারপরে একটিযুক্ত সমস্ত লাইন মুছুন 3

ইউনিক্স কমান্ডটি হ'ল

ls -1 a* | grep -v 3

ls -1 প্রতি লাইনে একটি ফাইল দেখায়।

grepসাধারণত একটি প্যাটার্নের সাথে মেলে এমন লাইনগুলি খুঁজে পাওয়া যায় তবে -vএই আচরণের সাথে উল্টানো হয়, অর্থাৎ গ্রেপ এমন রেখা খুঁজে পায় যা সেই প্যাটার্নের সাথে মেলে না।


2
হে পিটার! আপনার সমাধান কীভাবে কার্যকর তা হিসাবে প্রাসঙ্গিক হিসাবে বিস্তারিতভাবে ব্যাখ্যা করা ভাল।
ধাগ

2
পার্সিং lsএকটি গুব ধারণা নয়: mywiki.wooledge.org/ পার্সিংএলস
বিশৃঙ্খলা

3

সহ zsh, ~ গ্লোব অপারেটর ব্যবহার করে :

setopt extendedglob
print -rl -- a*~*3*

সঙ্গে gnu lsআপনি দুই ব্যবহার করতে পারে --ignoreবিকল্পগুলি:

ls -I '[^a]*' -I '*3*'

1 ম সমস্ত ফাইলের নাম অগ্রাহ্য করে যা শুরু হয় না aএবং 2 য় ফাইল ফাইলকে উপেক্ষা করে যা এতে রয়েছে3

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