मैं जानना चाहता हूं कि .cएक बड़ी जटिल निर्देशिका संरचना में कितनी नियमित फाइलों का विस्तार है, और ये भी कि ये फाइलें कितनी निर्देशिकाओं में फैली हुई हैं। मुझे जो आउटपुट चाहिए वो सिर्फ दो नंबर का है।
मैंने यह प्रश्न देखा है कि फ़ाइलों की संख्या कैसे प्राप्त की जाए, लेकिन मुझे यह जानने की आवश्यकता है कि फाइलें कितनी निर्देशिकाओं में हैं।
- मेरे फ़ाइलनाम (निर्देशिका सहित) में कोई भी वर्ण हो सकता है; वे इसके साथ शुरू कर सकते हैं
.या-रिक्त स्थान या newlines हो सकते हैं। - मेरे पास कुछ सिम्लिंक हो सकते हैं जिनके नाम के साथ अंत होता है
.c, और निर्देशिकाओं के लिए सहानुभूति होती है। मैं सिमिलिंक का पालन या गणना नहीं करना चाहता, या मैं कम से कम यह जानना चाहता हूं कि क्या और कब उन्हें गिना जा रहा है। - निर्देशिका संरचना में कई स्तर हैं और शीर्ष स्तर की निर्देशिका (कार्यशील निर्देशिका) में कम से कम एक
.cफ़ाइल है।
मैंने जल्दबाजी में (बैश) शेल में कुछ कमांड लिखीं कि वे खुद को गिन सकें, लेकिन मुझे नहीं लगता कि परिणाम सटीक है ...
shopt -s dotglob
shopt -s globstar
mkdir out
for d in **/; do
find "$d" -maxdepth 1 -type f -name "*.c" >> out/$(basename "$d")
done
ls -1Aq out | wc -l
cat out/* | wc -l
यह अस्पष्ट रीडायरेक्ट के बारे में शिकायतों का उत्पादन करता है, वर्तमान निर्देशिका में फ़ाइलों को याद करता है, और विशेष वर्णों पर यात्रा करता है (उदाहरण के लिए, पुनर्निर्देशित findआउटपुट फ़ाइलनामों में नईलाइन्स प्रिंट करता है ) और खाली फ़ाइलों (उफ़) का एक पूरा गुच्छा लिखता है।
मैं अपनी .cफ़ाइलों और उनकी निर्देशिकाओं को कैसे भरोसेमंद रूप से शामिल कर सकता हूं ?
यदि यह मदद करता है, तो बुरे नामों और सहूलियों के साथ एक परीक्षण संरचना बनाने के लिए यहां कुछ आदेश दिए गए हैं:
mkdir -p cfiles/{1..3}/{a..b} && cd cfiles
mkdir space\ d
touch -- i.c -.c bad\ .c 'terrible
.c' not-c .hidden.c
for d in space\ d 1 2 2/{a..b} 3/b; do cp -t "$d" -- *.c; done
ln -s 2 dirlink
ln -s 3/b/i.c filelink.c
परिणामी संरचना में, 7 निर्देशिकाओं में .cफाइलें होती हैं, और 29 नियमित फाइलें समाप्त होती हैं .c(यदि dotglobकमांड चलने पर बंद हो जाती है) (यदि मैंने गलत तरीके से देखा है, तो कृपया मुझे बताएं)। ये वो नंबर हैं जो मुझे चाहिए।
कृपया बेझिझक इस विशेष परीक्षण का उपयोग न करें।
NB: किसी भी खोल या अन्य भाषा में उत्तर मेरे द्वारा जांचे और सराहे जाएंगे। अगर मुझे नए पैकेजों को स्थापित करना है, तो कोई समस्या नहीं है। यदि आप GUI समाधान जानते हैं, तो मैं आपको साझा करने के लिए प्रोत्साहित करता हूं (लेकिन मैं इसे परीक्षण करने के लिए पूरे DE को स्थापित करने के लिए इतनी दूर नहीं जा सकता) :) मैं Ubuntu MATE 17.10 का उपयोग करता हूं।