बैश विस्तारित ग्लोब - उपसर्ग के बिना फ़ाइलों का मिलान करें


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.lexample.com को छोड़कर किसी भी डोमेन पर किसी भी phpMyAdmin URL का अनुरोध करने वाले किसी व्यक्ति को प्रतिबंधित करने वाला एक फ़िल्टर बनाना चाहता हूं)

जवाबों:


18

विस्तारित फ़ाइल नाम ग्लोबिंग पैटर्न (द्वारा समर्थित 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 बोलने के लिए पैटर्न के साथ हमें छोड़ देगा (पहले *"विशेष" होने के साथ )।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.