Directory ls` মিলের প্যাটার্নে একটি ডিরেক্টরি বাদ দিন


13

আমি lsযে .pngফাইলগুলির ভিতরে ফাইল রয়েছে তা করার চেষ্টা করছি (পুনরাবৃত্তির প্রয়োজন নেই, যদিও এটি অতিরিক্ত দরকারী হবে), একটি উপস্থাপন করুন। একটি ডিরেক্টরি বাদ দিন

ls */*.png

ঠিকভাবে কাজ করে.

ls (^one)*/*.png

কোন stdout ফেরত না। আমি কীভাবে এটি অর্জন করব?

আমি অন্ধ এবং এটি পাইপ করছি espeak, তাই আমি আপাতত স্ট্যাডআউট শুনতে পাচ্ছি।


আপনি কোন শেল ব্যবহার করছেন? আপনার প্যাটার্নটি zsh প্যাটার্নের মতো দেখাচ্ছে, যদিও এটি কার্যকর নয় কারণ এটি বাদ দেয় না one(সঠিক প্যাটার্নটি হবে ^one/*.png), এটি সমস্ত কিছু মুদ্রণ করবে।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

উত্তর:


16

বিকল্প 1 - জাস্ট ব্যবহার করে ls:
বর্ধিত ব্যাশ গ্লোব্বিং চালু ( shopt -s extglob) দিয়ে আপনি করতে পারেন:

ls !(one*)/*.png


বিকল্প 2 - সংমিশ্রণ lsএবং grep:

আপনি একত্রিত করতে পারেন lsসঙ্গেgrep -v

  • যেমন ls */*.png | grep -v "one/"


বিকল্প 3 - (সেরা আইএমও) কিন্তু ব্যবহার করে findনা ls:

ব্যবহার করে সমস্ত উপ-ডিরেক্টরিতে পুনরাবৃত্ত অনুসন্ধানের জন্য find

find . -type f -name "*.png" -not -path "*/one/*"


উপরের সমস্ত ওয়ান-লাইনারগুলি .pngকোনও পাথের মিলের ফিল্টার করার সময় ফাইলগুলির সাথে ডিরেক্টরিগুলি তালিকাভুক্ত করবে one/; কেবল বিকল্প 3 এটি পুনরাবৃত্তভাবে করবে।


না findবলে কমান্ড প্রয়োজনে -path "*/one/*"বা -path "./one/*"?
জি-ম্যান

@ জি-ম্যান আপনি একদম ঠিক বলেছেন। উপরে সম্পাদিত।
টক্সেফা

এখনও কি মেলে না ./phone/handset.png?
জি-ম্যান

@ জি-ম্যান .pngনামের ডিরেক্টরিতে কী মিলছে phone? আমি ভেবেছিলাম আমরা কেবল বাদ দেওয়ার চেষ্টা করছি one?
টক্সেফা

1
ঠিক আছে, যেহেতু আপনি এটির সাথে সংযোগ ব্যবহার করছেন -notতাই এর অর্থ হ'ল এটি findডিরেক্টরিতে ডাকা ডিরেক্টরিতে ফাইলগুলি বাদ দেয় phone
জি-ম্যান বলেছেন 8 '

6

ইন zsh , করা setopt extended_globআপনার ~/.zshrc। তারপরে আপনি ডাকা ডিরেক্টরিটি বাদ দিতে ওয়াইল্ডকার্ড প্যাটার্নটি ব্যবহার করতে পারেন ।^oneone

ls ^one/*.png

আপনি যদি সাব-ডিরেক্টরিতে **/পুনরাবৃত্তি করতে চান তবে পুনরাবৃত্ত গ্লোববিংয়ের জন্য ব্যবহার করুন । শীর্ষ oneস্তরে ডাকা ডিরেক্টরিটি পাশাপাশি শীর্ষ স্তরের ডিরেক্টরি বাদ দিতে :

ls ^one/**/*.png

নামক একটি উপ-ডিরেক্টরিতে ফাইলগুলি বাদ দিতে one, তবে এর উপ-ডিরেক্টরিতে ফাইল নয়:

ls **/^one/*.png

যে oneকোনও স্তরে ডাকা সাব-ডাইরেক্টরির অধীনে ফাইলগুলি বাদ দিতে #অপারেটরের সাথে প্রত্যাখ্যানের আশেপাশে পুনরাবৃত্তি বিন্যাসটি ব্যবহার করুন:

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