fileआदेश मेरी जरूरतों के लिए फ़ाइल प्रकारों को निर्धारित करने में अच्छा है। क्या उन परिणामों को पारंपरिक फ़ाइल नाम एक्सटेंशन में मैप करने का कोई तरीका है?
fileआदेश मेरी जरूरतों के लिए फ़ाइल प्रकारों को निर्धारित करने में अच्छा है। क्या उन परिणामों को पारंपरिक फ़ाइल नाम एक्सटेंशन में मैप करने का कोई तरीका है?
जवाबों:
आपके सिस्टम पर पंजीकृत फ़ाइल एक्सटेंशन में होना चाहिए /etc/mime.types। तो, मान लें कि आप फ़ाइल प्रकार fileको एक चर में आउटपुट से निकालने में कामयाब रहे type, जिसे आप कह सकते हैं:
grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
या (जैसा कि टिप्पणियों में 200_success द्वारा सुझाया गया है), आप awkअकेले उपयोग कर सकते हैं:
awk -v IGNORECASE=1 '/ENVIRON["type"]/{$1="";print $0}'
उदाहरण
$ type=Perl
$ grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
pl pm
grepतुलना में अधिक तेज़ हो जाएगा awk।
यह @ hildred के उत्तर के रूप में एक ही मूल विचार है, लेकिन एक सरल दृष्टिकोण ( gawk) का उपयोग करके और रिक्त स्थान और अज्ञात फ़ाइल प्रकारों वाले फ़ाइल नामों से निपटने के लिए संशोधित किया गया है।
अपने शेल के आरंभीकरण फ़ाइल में इन पंक्तियों को जोड़ें ( ~/.bashrcउदाहरण के लिए, यदि आप चल रहे हैं bash):
get_ext(){
for f in "$@"; do
type='unknown extension';
foo=$(grep -w "$(file --mime-type "$f" | awk '{print $NF}')" /etc/mime.types |
awk -F"\t" 'NF>1{print $NF}')
[ -n "$foo" ] && type="$foo";
printf "%s\t%s\n" "$f" "$type";
done
}
अब आप इसे इस तरह से चला सकते हैं:
$ get_ext *
cp unknown extension
file with spaces .jpg jpeg jpg jpe
foo.pl pl pm
foo.png png
foo.py py
foo.txt asc txt text pot brf srt
यह उन फ़ाइलों के लिए 'अज्ञात एक्सटेंशन' लौटाएगा जिनमें कोई संबंधित एक्सटेंशन नहीं है /etc/mime.typesजैसे कि cpएक निष्पादन योग्य है।
grep | awkआमतौर परawkअकेले का उपयोग करके किया जा सकता है ।