हालांकि od -cवास्तव में एक फ़ाइल की सामग्री को दिखाएगा, यह अपनी फ़ाइल प्रकार प्राप्त करने का एक अच्छा तरीका नहीं है। जबकि कुछ फ़ाइलों में फ़ाइल प्रकार के साथ एक हेडर होगा, सभी नहीं। एक बेहतर तरीका कमांड है file:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
इसलिए, निर्देशिका में सभी फ़ाइल प्रकारों की सूची प्राप्त करने के लिए, आप यह कर सकते हैं:
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
उदाहरण आउटपुट:
PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
ASCII text
directory
GIF image data, version 89a, 22 x 22
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped
व्याख्या
for file in dir/*; do ... done;: सब कुछ के माध्यम से पुनरावृति dir( dirयह सिर्फ एक उदाहरण है, आपको इसे उस वास्तविक निर्देशिका के नाम में बदलना चाहिए जिसे आप खोज करना चाहते हैं), बदले में प्रत्येक आइटम को सहेजना$file
file "$file": fileप्रत्येक आइटम पर चला।
cut -d: -f 2: केवल दूसरा फ़ील्ड (द्वारा परिभाषित फ़ील्ड :) प्रिंट करें
sed 's/^ //; s/ +/ /g' : लाइन की शुरुआत से रिक्त स्थान निकालें और लगातार रिक्त स्थान को एक ही स्थान में परिवर्तित करें।
sort -u : डुप्लिकेट फ़ाइल प्रकारों को हटा दें