मुझे सभी छिपी हुई फ़ाइलों के लिए ग्लोब कैसे करना चाहिए?


22

मैं chownएक निर्देशिका में सभी छुपी हुई फाइलों पर कुछ कार्रवाई (कहना ) करना चाहता हूं ।

मुझे पता है कि यह .*है नहीं एक अच्छा विचार है, क्योंकि यह भी वर्तमान मिलेगा .और माता पिता ..निर्देशिका (मुझे पता है कि rmपर संचालित करने के लिए असफल हो जायेगी .और ..लेकिन सहित अन्य आदेश, chownऔर chmod, खुशी से प्रभावी होगा)

लेकिन मेरी सभी छुपी हुई फाइलों के अलग-अलग नाम हैं!

बाहर करते समय मुझे सभी छिपी हुई फ़ाइलों के लिए ग्लोब कैसे करना चाहिए .और ..?

जवाबों:


20

आप निम्न extglobपैटर्न का उपयोग कर सकते हैं :

.@(!(.|))
  • .पहले एक शाब्दिक .से मेल खाता है

  • @()एक extglobपैटर्न है, अंदर के पैटर्न में से एक से मेल खाएगा, क्योंकि हमारे पास इसके अंदर केवल एक पैटर्न है, यह इसे चुन लेगा

  • !(.|)एक अन्य extglobपैटर्न (नेस्टेड) ​​है, जो किसी भी फ़ाइल को बिना या किसी के साथ मेल खाता है .; जैसा कि हमने .शुरुआत में ही मिलान कर लिया है , यह पूरा पैटर्न .सिवाय .और के साथ शुरू होने वाली सभी फाइलों से मेल खाएगा ..

extglobbashउबंटू में डिफ़ॉल्ट रूप से इंटरएक्टिव सत्रों पर सक्षम है । यदि नहीं, तो इसे पहले सक्षम करें:

shopt -s extglob

उदाहरण:

$ echo .@(!(.|))
.bar .foo .spam

यह स्पष्ट रूप से एक भयानक बात है जिसके बारे में मुझे जानने की आवश्यकता है! पढ़ाने के लिए धन्यवाद
Zanna

@Zad Glad मैं मदद कर सकता था :)
heemayl

2
का उद्देश्य क्या है @()? साधारण .!(.|)रूप से काम करने लगता है।
काइल स्ट्रैंड

1
मुझे पता है कि यह पुराना है, लेकिन मेरे पास @KyleStrand जैसा ही सवाल है। मेरे परीक्षणों में, !(.|)वही काम करता है। क्या @()इस संदर्भ में कोई उद्देश्य है?
धान लांडौ

क्या धमाकेदार किरदार एक नकार है? यह उल्लेख नहीं है, और आपके स्पष्टीकरण को पढ़ते हुए, मुझे यह धारणा मिलती है, कि पैटर्न डॉट और डबलडॉट से मेल खाता है, लेकिन आप स्पष्ट रूप से उन फाइलों का वर्णन करते हैं, जो शुरुआती डॉट से मेल खाती हैं, सिर्फ उन दो को छोड़कर।
उपयोगकर्ता अज्ञात

20
 GLOBIGNORE=".:.."

छिपाना। और .. निर्देशिका। यह dotglobविकल्प भी सेट करता है: *छिपी हुई और गैर-छिपी हुई फ़ाइलों दोनों से मेल खाता है।

आप भी कर सकते हैं

shopt -s dotglob

गिल्स :)


9

आप एक का उपयोग कर सकते हैं find यहां कमांड का । उदाहरण के लिए कुछ

find -type f -name ".*" -exec chmod 775 {} \;

यह छिपी हुई फाइलें ढूंढेगा और अनुमतियां बदल देगा


टिप्पणी को @gerrit द्वारा शामिल करने के लिए संपादित करें:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

यह पुनरावर्ती खोज करने के बजाय वर्तमान शीर्ष खोज को सीमित कर देगा।


4
आप -maxdepth 1प्रश्न और अन्य उत्तरों में व्यवहार के अधिक निकटता के लिए इसे यहाँ जोड़ना चाह सकते हैं ।
गुरट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.