एक निर्देशिका में सभी एक्सटेंशन और उनके संबंधित फ़ाइल गणना प्राप्त करें


14

निर्देशिका के लिए सभी एक्सटेंशन प्राप्त करना: आसान। फ़ाइल को किसी विशेष एक्सटेंशन के लिए गिनना: आसान।

लेकिन सभी फ़ाइल एक्सटेंशन प्राप्त करना और उनकी संबंधित फ़ाइल की गणना मेरे लिए महत्वपूर्ण है।

जैसे।

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

कुछ इस तरह लौटना चाहिए:

.txt 2
.pdf 1
.pov 1

इस अभ्यास का उद्देश्य यह है कि मैं यह पता लगाना चाहता हूं कि कौन सी फ़ाइल एक्सटेंशन एक निश्चित निर्देशिका में लोकप्रिय है।

अग्रिम में धन्यवाद

जवाबों:


47
/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

यहां बताया गया है:

find ./ -type f

केवल फ़ाइल खोजें, निर्देशिका नहीं

grep -E ".*\.[a-zA-Z0-9]*$"

एक्सटेंशन के साथ फ़िल्टर फ़ाइल

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

पथ और फ़ाइल नाम हटाएं, केवल एक्सटेंशन सहेजें

sort | uniq -c | sort -n

सॉर्ट, यूनीक और सॉर्ट


आप अपने regex को विस्तार में और अधिक वर्णों को अनुमति दे सकते हैं और grepऐसा करके समाप्त कर सकते हैं:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
अगली सूचना तक

डेनिस, अपने सेड के साथ grep और sed की जगह निम्न त्रुटि देता है: sed: -e अभिव्यक्ति # 1, char 30: अमान्य संदर्भ \ 1 on 's' कमांड का RHS
भाजक

2

चूंकि आप लिनक्स (gnu grep) का उपयोग कर रहे हैं, यह पर्ल आरईएस (PCRE) -Pऔर grep -oविकल्प का उपयोग करने का एक अच्छा समय है । एक महान उम्मीदवार के रूप में @ bindbn का जवाब लेना:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.