निर्देशिका के अंदर छिपी फ़ाइलों के साथ * मिलान कैसे करें


21

दिए गए निर्देशिकाओं के अंदर छिपी हुई फ़ाइलों का मिलान कैसे करें

उदाहरण के लिए

अगर मैं नीचे दी गई कमांड देता हूं तो यह छिपी हुई फाइलों का परिणाम नहीं दे रहा है,

 du -b maybehere*/*

उपयोग करने के बजाय एक एकल आदेश का उपयोग करके इस सरल को कैसे प्राप्त करें

du -b maybehere*/.* maybehere*/*

जैसा कि मुझे दो बार कहीं भी टाइप करने की आवश्यकता है।


बस छिपे हुए के लिए प्रयास करें maybehere*/.*और सभी के लिए ऊपर संलग्न करें
कोस्टास

1
आपका संपादन अतिरिक्त प्रतिबंधों के साथ एक नया प्रश्न बनाता है, जो क्यू को एक चलती लक्ष्य में बनाता है, संभव है कि पहले से दिए गए उत्तर (ओं) को अमान्य कर दिया जाए। यह बुरा है शिष्टाचार, बस एक नया सवाल पूछें अगर आपके पास एक है।
एंथन

जवाबों:


22

ब्रेस विस्तार का लाभ लें:

du -b maybehere*/{*,.[^.],.??*}

या वैकल्पिक रूप से

du -b maybehere*/{,.[^.],..?}*

इसके पीछे तर्क शायद स्पष्ट नहीं है, इसलिए यहां स्पष्टीकरण दिया गया है:

  • * सभी गैर-छिपी हुई फ़ाइलों से मेल खाता है
  • .[^.]उन फाइलों से मेल खाता है जिनके नाम एकल डॉट के साथ शुरू हुए थे, उनके बाद डॉट नहीं; पहले रूप में केवल 2 चरित्र फ़ाइल नाम हैं।
  • .??* छिपी हुई फ़ाइलों से मेल खाता है जो कम से कम 3 वर्ण लंबे हैं
  • ..?* ऊपर की तरह, लेकिन दूसरा वर्ण एक बिंदु होना चाहिए

पूरे बिंदु को वर्तमान और मूल निर्देशिका ( .और ..) के लिए हार्ड लिंक को बाहर करना है , लेकिन सभी सामान्य फ़ाइलों को इस तरह से शामिल करें कि उनमें से प्रत्येक को केवल एक बार गिना जाएगा!

उदाहरण के लिए सबसे सरल सिर्फ लिखना होगा

du -b maybehere*/{.,}*

इसका मतलब है कि सूची में एक डॉट .और "कुछ भी नहीं" (कुछ भी नहीं है ,और बंद होने वाला है }), इस प्रकार सभी छिपी हुई फाइलें (जो एक डॉट से शुरू होती हैं) और सभी गैर-छिपी हुई फाइलें (जो "कुछ भी नहीं" से शुरू होती हैं) का मिलान होगा। समस्या यह है कि यह भी मेल खाएगा .और ..यह संभवत: सबसे अधिक संभव है कि आप क्या चाहते हैं, इसलिए हमें इसे किसी तरह बाहर करना होगा।


ब्रेस विस्तार के बारे में अंतिम शब्द।

ब्रेस विस्तार एक तंत्र है जिसके द्वारा आप कम वर्ण लिखकर अधिक फ़ाइलों / स्ट्रिंग्स / जो भी कमांडलाइन में शामिल कर सकते हैं। वाक्य रचना है {word1,word2,...}, यानी यह अल्पविराम से अलग तारों की एक सूची है जो इसके साथ शुरू {और समाप्त होती है }bashमैनुअल एक बहुत ही बुनियादी और एक ही समय में उपयोग का बहुत ही सामान्य उदाहरण देता है:

$ echo a{b,c,d}e
abe ace ade

के उपयोग क्या है { }मुझे पता नहीं है :( आप मुझे इसके बारे में अधिक जानकारी प्राप्त करने के लिए एक दिशा दे सकते हैं
विधान

@vidhan संपादित देखें, और man bash"ब्रेस एक्सपेंशन" अध्याय देखें।
जिमीज

तुम मुझे ans थोड़ा ऊपर के लिए और अधिक स्पष्टीकरण देने के दिमाग होगा और अधिक स्पष्ट रूप समझा हर चीज कैसे काम करता है के रूप में मैं इन बातों को @jimmij साथ नया हूँ
विधान

6
.??*मेल करने में विफल रहता है .a, .b... .[^.]*मिलान करने में विफल रहता है ..foo
स्टीफन चेज़लस

4
.fooमैच .[^.]*और दोनों .??*। आप चाहते हैं {.[!.],..?,}*
स्टीफन चेज़लस

14

चूंकि आप पहले से ही GNU विशिष्ट सिंटैक्स का उपयोग कर रहे हैं ( -b):

du -abd1 maybehere*/

इस तरह, यह निर्देशिकाओं duमें फ़ाइलों को सूचीबद्ध maybehere*करता है (और यह डॉट फ़ाइलों को बाहर नहीं करता है)।-d1डिस्क उपयोग की रिपोर्टिंग को एक स्तर नीचे (गैर-निर्देशिकाओं सहित -a) के साथ सीमित करता है ।

अन्यथा, globs छिपा फ़ाइलें (सिवाय शामिल करने के लिए .और ..), प्रत्येक खोल अपनी ही वाक्य रचना है:

  • zsh:

    du -b maybehere*/*(D)
  • ksh93:

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
  • bash:

    (shopt -s dotglob; du -b maybehere*/*)
  • tcsh:

    (set globdot; du -b maybehere*/*)
  • yash:

    (set -o dot-glob; du -b maybehere*/*)

    हालांकि इसमें शामिल हैं .और ..उन प्रणालियों पर शामिल हैं जो उन्हें परिणाम में शामिल करते हैं readdir() जो इसे शायद ही उपयोग करने योग्य बनाता है।


8

एक और विकल्प यहाँ उपलब्ध है :

du -sm .[!.]* *

आप फ़ाइल नाम को किसके साथ छोड़ना चाहते हैं ..?
Kusalananda

2
मुमकिन है, क्योंकि वे सब कुछ ../नीचे और नीचे सूचीबद्ध नहीं करना चाहते हैं।
Shadur

यह फ़ाइलों की गणना नहीं करता है जैसे ..myfile; उसके लिए जोड़ें ..?*। लेकिन नकारात्मक मैचों के लिए उचित ग्लोब सिंटैक्स का उपयोग करने के लिए +1।
पेड्रो गिमेनो

0

यदि आप केवल छिपी हुई निर्देशिकाओं को सूचीबद्ध करना चाहते हैं या छिपी हुई निर्देशिकाओं को संचालित करना चाहते हैं तो जैसा कि कोस्टास ने कहा था कि आप इसका उपयोग कर सकते हैं

du -b maybehere*/.*

यह आपको छिपी हुई फ़ाइलों और निर्देशिकाओं पर काम करने की अनुमति देगा। यदि आप केवल छिपी निर्देशिका चाहते हैं, तो आप इसे निर्दिष्ट कर सकते हैं

du -b maybehere*/.*/


आप कृपया एक बार फिर से @SailorCire मैं यह थोड़ा संपादित किया है प्रश्न देख सकते हैं
विधान

@vidhan तो आप केवल एक निर्देशिका के अंदर छिपे काम करना चाहते हैं? क्या वो सही है?
सेलोरियर

नहीं, मैं दोनों निर्देशिकाओं का उपयोग करने के बजाय एक जोड़ी के अंदर छिपी हुई और गैर-छिपी हुई दोनों फाइलों का मिलान करना चाहता हूं maybehere*/.*और maybehere*/*एक छिपा हुआ और दूसरे के लिए गैर-छिपा हुआ
vidhan

@ विधन du -bछिपी और छिपी दोनों को उठाता है।
नाविक

कोई :( दुर्भाग्य @SailorCire
विधान

0

सीधे नहीं खोलते समय, आप इस तरह सीमित गहराई के साथ पा सकते हैं

find maybehere -maxdepth 1 -exec du -sh {} \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.