বাশ প্রসারিত গ্লোব - উপসর্গ ছাড়াই ফাইলগুলি মেলান


13

আমি ব্যর্থ 2 বা কারাগারের জন্য ফাইলের নামগুলি মেলানোর চেষ্টা করছি - সুতরাং আমাকে কেবল ফাইলের নাম গ্লোববিং ব্যবহার করতে হবে - রেজেক্স বা বাশ স্ক্রিপ্টিং নয়।

আমার /var/log/apache2ডিরেক্টরিতে অন্তর্ভুক্ত ফাইল রয়েছে:

example.com.error.log
db.example.com.error.log
app1.example.com.error.log
app2.example.com.error.log

আমি .error.log বাদ দিয়ে শেষ হওয়া সমস্ত ফাইলের সাথে একটি গ্লোব তৈরির চেষ্টা করছি db.example.error.log- এটি কি সম্ভব?

আমি চেষ্টা করেছি !(db)*.error.logকিন্তু এটি এখনও মেলে db.example.com.error.log। আমি অনুমান করছি যে !()কোনও অক্ষরটির *সাথে মেলে না, ফাইলের নামের শুরু থেকে এটি মেলতে দেয়।

দ্রষ্টব্য: নতুন appXলগফাইল যোগ করার সময় আমি গ্লোবটি প্রসারিত করতে চাই না , সুতরাং আমি @()বর্তমানে পরিচিত নন-ডিবি ফাইল নামগুলির তালিকাটি ব্যবহার করতে পারি না ।

(পটভূমি: আমি একটি ফিল্টার তৈরি করতে চাই যে কোনও ব্যক্তিকে db.example.com ব্যতীত যে কোনও ডোমেইনে পিএইচপিএমআইএডমিন ইউআরএল অনুরোধ করে নিষিদ্ধ করে )

উত্তর:


18

বর্ধিত ফাইলের নাম globbing ধরণ (দ্বারা সমর্থিত bashসঙ্গে extglobশেল বিকল্প সক্রিয় করা, এবং এছাড়াও দ্বারা ksh93)

!(db*).error.log

যেটি শুরু হয় তা উপেক্ষা করবে db

আরো নির্দিষ্ট করা:

!(db.example.com).error.log

এটি সঠিক ডিরেক্টরি থেকে শুরু হওয়া বর্তমান ডিরেক্টরিতে থাকা কোনও নামকে উপেক্ষা করবে db.example.com

!(db.example.com)প্যাটার্ন একটি "বিশেষ মত কাজ করে *" যে স্ট্রিং মেলে না হবে db.example.com


আপনার প্যাটার্ন,

!(db)*.error.log

শুরু হওয়া কোনও নাম বাদ দেয় না dbতবে এর পরে যে কোনও স্ট্রিংকে মঞ্জুরি দেয় , এতে অবশ্যই অন্তর্ভুক্ত থাকে db

উপরের মতো একই উপমা অনুসারে, !(db)"পছন্দ *" করে তবে সঠিক স্ট্রিংয়ের সাথে মেলে না db, আমাদের **.error.log কথা বলার মতো ধরণটি রেখে গেছে (প্রথমটি *"বিশেষ" হিসাবে রয়েছে)।

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