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
अकेले का उपयोग करके किया जा सकता है ।