UNIX ওয়াইল্ডকার্ড সহ ফাইলের পরিসীমা তালিকাবদ্ধ করুন


14

উদাহরণস্বরূপ বলুন যে আমার ওয়ার্কিং ডিরেক্টরিতে আমার কাছে নিম্নোক্ত ফাইলগুলি রয়েছে: mjk0001.fits, mjk0002.fits, ... সংখ্যাবৃত্তভাবে mjk9999.fits পর্যন্ত সমস্ত উপায়ে বৃদ্ধি করা।

ইউনিক্স ওয়াইল্ডকার্ডগুলির একটি ক্রমিক গ্রুপের তালিকাবদ্ধ বা পরিচালনা করার জন্য কি কোনও উপায় আছে? উদাহরণস্বরূপ, যদি আমার 0025 থেকে 0050 এর মাধ্যমে কোনও প্রক্রিয়া চালানো দরকার তবে আমি কোন ফর্ম্যাটটি ব্যবহার করব?

আমি নিম্নলিখিত চেষ্টা করেছিলাম কিন্তু কোন সাফল্য পাইনি:

ls *[25-50].fits
ls mjk00[25-50].fits
ls mjk[0025-0050]*
ls *[0025-0050]*

সবাইকে অগ্রিম ধন্যবাদ, এমকে


রেফারেন্স জন্য: প্যাটার্ন ম্যাচিং , globbing
অগ্নি

উত্তর:


20

আপনি বন্ধনী সম্প্রসারণ ব্যবহার করতে পারেন:

ls mjk00{25..50}.fits

শীর্ষস্থানীয় জিরোগুলি প্রয়োজনে অন্তর্ভুক্ত করা যেতে পারে:

ls mjk0{000..149}.fits

1
এই সিনট্যাক্স ব্যবহার করে, আপনি একটি ধাপ মান নির্দিষ্ট করতে পারেন: {25..50..2}
নোবার

1

সরাসরি নয়, তবে আপনি একাধিক গ্লোব নিদর্শন ব্যবহার করতে পারেন:

ls mjk002[56789].fits mjk00[34]?.fits

এটি আপনি যা খুঁজছেন ঠিক তা নয়, তবে এটি বিশ্বব্যাপী নিদর্শনগুলির মধ্যে সবচেয়ে কাছের জিনিস এবং এটি প্রতিটি ফাইল সিস্টেম টাইপ করার চেয়ে অবশ্যই ভাল। কমপক্ষে প্রতি সংখ্যার পরিসরের জন্য আপনার যে পরিমাণ প্যাটার্নের প্রয়োজন হবে সেগুলি সীমার সংখ্যাসমূহের শেষ পয়েন্টগুলির লগ দ্বারা আবদ্ধ।


1

আপনি গ্রিপ সহ একটি রেগেক্স ব্যবহার করতে পারেন। আমি একজন রেজেক্স গুরু নই। নিম্নলিখিত 25-50 সংখ্যা বেতার সঙ্গে প্যাটার্ন প্রদান:

ls | sort -n | grep -E 'mjk00([2][5-9]|[3-4][0-9]|[5][0]).fits'

আমি জানি না এটি সম্ভব কিনা এবং শেষ পর্যন্ত কীভাবে এটি গ্রেপ দিয়ে সাধারণীকরণ করা হয়।


0

forলুপ ব্যবহার করে এবং বৃহত্তর বহনযোগ্যতা বা নমনীয়তা অর্জন করা সম্ভব এবং printf:

for i in $(seq 25 50 1) ; do ls --escape $(printf "mjk%04d*" $i) ||true; done

এটি স্পেসগুলি ভালভাবে পরিচালনা করে এবং ফলাফলগুলি xargsআরও প্রসেসিংয়ের জন্য পাইপিংয়ের জন্য উপযুক্ত ।

একাধিক মিলের সাথে সংখ্যাগুলি ফলস্বরূপ সমস্ত মেলানো ফাইল তালিকাভুক্ত হবে।

কোনও মিল নেই এমন নম্বর স্টাডারে একটি ত্রুটির খবর দেবে, তবে ||trueবাশ-স্তরের ত্রুটির প্রত্যাবর্তনকে দমন করে।


মূল ক্ষেত্রে, যদিও, ব্যবহার করা forএবং printfআরও সংক্ষিপ্ততর থেকে আলাদা নয়:

ls --escape mjk{0025..0050..1}* ||true

যদি আপনি বন্ধনী সম্প্রসারণের ফলাফলগুলি পৃথক করতে চান তবে আপনি লুপের জন্য একটি ব্যবহার করতে পারেন:for i in {025..050} ; do ... ; done
নোবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.