যদিও find
কমান্ড ব্যবহার এখানে দরকারী হতে পারে, শেল নিজেই কোনও তৃতীয় পক্ষের সরঞ্জাম ছাড়াই এই প্রয়োজনীয়তা অর্জনের জন্য বিকল্প সরবরাহ করে। bash
শেল যা আপনি রিকার্সিভ পাথ অধীনে ফাইলের নাম পেতে পারেন ব্যবহার একটি বর্ধিত উল্লিখিত glob সমর্থন বিকল্প প্রদান করে যা এক্সটেনশনগুলিকে যদি আপনি চান সঙ্গে ম্যাচ।
বর্ধিত বিকল্পটি extglob
যা shopt
নীচের মত বিকল্প ব্যবহার করে সেট করা দরকার । বিকল্পগুলি -s
সমর্থন সহ সক্ষম করা হয়েছে এবং তিনি -u
পতাকা সহ অক্ষম করেছেন । অতিরিক্ত হিসাবে আপনি আরও কয়েকটি বিকল্প ব্যবহার করতে পারেন nullglob
, যাতে শূন্য শব্দের সংকলনের সাথে এক মিলিত গ্লোব পুরোপুরি সরে যায়। এবং globstar
এটি সমস্ত ডিরেক্টরি মাধ্যমে পুনরাবৃত্তি করতে পারবেন
shopt -s extglob nullglob globstar
নীচের মতো আপনি করতে পারেন এমন একটি নির্দিষ্ট এক্সটেনশনের ফাইলগুলি অন্তর্ভুক্ত করার জন্য এখন আপনাকে কেবল গ্লোব এক্সপ্রেশনটি তৈরি করতে হবে। আমরা গ্লোব ফলাফলগুলি জনপ্রিয় করতে একটি অ্যারের ব্যবহার করি কারণ যখন সঠিকভাবে উদ্ধৃত করা হয় এবং প্রসারিত করা হয়, তখন বিশেষ অক্ষরযুক্ত ফাইলের নামগুলি অক্ষত থাকবে এবং শেলের দ্বারা শব্দ বিভাজনের কারণে ভাঙবে না।
উদাহরণস্বরূপ *.csv
পুনরাবৃত্ত পথে সমস্ত ফাইল তালিকাভুক্ত করা
fileList=(**/*.csv)
বিকল্পটি **
সাব-ফোল্ডারগুলির মাধ্যমে পুনরাবৃত্তি করা এবং *.csv
উল্লিখিত এক্সটেনশনের কোনও ফাইল অন্তর্ভুক্ত করার জন্য গ্লোব সম্প্রসারণ is আসল ফাইলগুলি মুদ্রণের জন্য এখনই করুন
printf '%s\n' "${fileList[@]}"
শেল স্ক্রিপ্টগুলিতে ব্যবহার করার সময় একটি অ্যারের ব্যবহার এবং সঠিক উদ্ধৃত সম্প্রসারণ করা সঠিক উপায়, তবে ইন্টারেক্টিভ ব্যবহারের জন্য আপনি কেবল ls
গ্লোব এক্সপ্রেশন দিয়ে যেমন ব্যবহার করতে পারেন
ls -1 -- **/*.csv
একাধিক ফাইলের অর্থাত্ ফাইলটি একাধিক এক্সটেনশনের সমাপ্তি (যেমন find
কমান্ডে একাধিক পতাকা যুক্ত করার অনুরূপ ) মেলাতে এটি খুব ভালভাবে প্রসারিত হতে পারে । উদাহরণ হিসেবে বলা যায় সব রিকার্সিভ ইমেজ ফাইল পেতে প্রয়োজন একটি মামলা বিবেচনা এক্সটেনশন অর্থাৎ *.gif
, *.png
এবং *.jpg
, সমস্ত আপনিই প্রয়োজন
ls -1 -- **/+(*.jpg|*.gif|*.png)
এটিকে খুব ভালভাবে বিস্তৃত করা যেতে পারে ফলাফলকেও অস্বীকার করার জন্য। একই সিনট্যাক্সের সাহায্যে কেউ নির্দিষ্ট ধরণের ফাইল বাদ দিতে গ্লোব এর ফলাফল ব্যবহার করতে পারে। ধরে নিন আপনি উপরের এক্সটেনশানগুলির সাথে ফাইলের নাম বাদ দিতে চান, আপনি করতে পারেন
excludeResults=()
excludeResults=(**/!(*.jpg|*.gif|*.png))
printf '%s\n' "${excludeResults[@]}"
কনস্ট্রাক্টটি !()
ভিতরে তালিকাভুক্ত কোনও ফাইল এক্সটেনশান অন্তর্ভুক্ত না করার জন্য একটি নিন্দিত অপারেশন এবং গ্লোবগুলির |
একটি ওআর ম্যাচ করার জন্য বর্ধিত নিয়মিত এক্সপ্রেশন লাইব্রেরিতে যেমন ব্যবহৃত হয় তেমন একটি বিকল্প অপারেটর।
নোট করুন যে এই প্রসারিত গ্লোব সমর্থনটি পসিক্স বোর্ন শেলটিতে উপলভ্য নয় এবং এর সাম্প্রতিক সংস্করণগুলির জন্য এটি সম্পূর্ণরূপে নির্দিষ্ট bash
। সুতরাং আপনি যদি পসিক্স এবং bash
শেলগুলি জুড়ে স্ক্রিপ্টগুলির বহনযোগ্যতার বিষয়টি বিবেচনা করছেন তবে এই বিকল্পটি সঠিক হবে না।