निर्देशिका में सम्‍मिलित फ़ाइलों के लिए सभी अनन्य एक्सटेंशनों को सूचीबद्ध करें


11

मैं एक निश्चित निर्देशिका में समाहित फाइलों के सभी अनूठे विस्तार को देखना चाहूंगा। बाश में ऐसा करने की आज्ञा क्या है?

find . -type fवर्तमान निर्देशिका में सभी फ़ाइलों को प्राप्त करने के लिए एक का उपयोग किया जा सकता है , फिर एक्सटेंशन को पट्टी करें, और इसे पाइप करें uniq। एक्सटेंशन पट्टी करने का सबसे आसान तरीका क्या है?

जवाबों:


15

इसे इस्तेमाल करे:

find . -type f | sed -rn 's|.*/[^/]+\.([^/.]+)$|\1|p' | sort -u

यह कुछ भी नहीं के लिए उत्पादन:

  • बिना एक्सटेंशन वाली फाइलें
  • एक डॉट में समाप्त होने वाले नामों वाली फाइलें
  • छिपी हुई फाइलें

इसे पाइप करने के लिए भी उपयोगी हो सकता है sort | uniq -c


मेरे मैक पर डिफ़ॉल्ट sed के साथ काम नहीं करता है। मैं मिलता हैsed: illegal option -- r
dzhelil

8
@celil: OS X के -Eबजाय का उपयोग करें -r

3
find . -type f | sed -E 's/.+[\./]([^/\.]+)/\1/' | sort -u

विस्तार के बिना फ़ाइलों को छोड़कर, ओएस एक्स पर काम करता है। मेरे डाउनलोड फ़ोल्डर:

DS_Store
dmg
exe
localized
msi
nib
plist
pmproj
rar
tgz
txt
webloc
zip

आपको sed -rइसके बजाय आवश्यकता हो सकती है ?


माइनर समस्या: एक्सटेंशन के बिना फ़ाइलें अपना नाम प्रिंट करती हैं। छिपी हुई फ़ाइलें (जैसे .DS_Store) उनके नाम को प्रमुखता के बिना प्रिंट करती हैं .


मैं sort -uइसके बजाय की सिफारिश करेंगे sort | uniq। कम फोर्किंग और संसाधन उपयोग।
जॉन टी

धन्यवाद @ जॉन। सेलेल के "ढांचे" के भीतर रखने की कोशिश की, इसलिए मैंने इसके बारे में नहीं सोचा।
डैनियल बेक

अंदर बिंदी से बचना जरूरी नहीं है []
अगली सूचना तक रोक दिया गया।

3

यहाँ अभी तक एक और समाधान है जो फ़ाइल नाम से भ्रमित नहीं होता है जिसमें एम्बेडेड नई कथानक होते हैं और sort -uzसही ढंग से फ़ाइल एक्सटेंशन को सॉर्ट करने के लिए उपयोग होता है जो हो सकता है:

# [^.]: exclude dotfiles
find . -type f -name "[^.]*.*" -exec bash -c '
   printf "%s\000" "${@##*.}" # get the extensions and nul-terminate each of them
' argv0 '{}' + |
sort -uz | 
tr '\0' '\n' | 
nl

3

एक्सटेंशन को हटाने का एक त्वरित और आसान तरीका याद रखना है कि सभी फ़ाइलनामों का प्रारूप "name.ext" है और फिर उपयोग करें:

 ls -1 | cut -d"." -f2- | sort | uniq -c

यह उदाहरण के लिए कितने अनूठे एक्सटेंशन हैं, इसकी एक गिनती देता है:

   1 sh  
   3 txt  
   4 txt.Z  
  17 dat  
  72 dat.gz  

1

देखें, यही कारण है कि मुझे जागना पसंद है:

find . -type f | awk -F "." '{ print $(NF) }' | sort -u
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.