मैं फ़ाइल का पारंपरिक फ़ाइल नाम एक्सटेंशन कैसे निर्धारित कर सकता हूं


6

fileआदेश मेरी जरूरतों के लिए फ़ाइल प्रकारों को निर्धारित करने में अच्छा है। क्या उन परिणामों को पारंपरिक फ़ाइल नाम एक्सटेंशन में मैप करने का कोई तरीका है?

जवाबों:


5

आपके सिस्टम पर पंजीकृत फ़ाइल एक्सटेंशन में होना चाहिए /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आमतौर पर awkअकेले का उपयोग करके किया जा सकता है ।
२००:३_ को २ '

@ 200_success कृपया संपादित उत्तर देखें।
जोसेफ आर।

@ 200_success हाँ लेकिन यह हमेशा एक अच्छा विचार नहीं है क्योंकि प्रत्येक पंक्ति के लिए एक regex की जाँच करने की grepतुलना में अधिक तेज़ हो जाएगा awk
टेर्डन

3

यह @ 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एक निष्पादन योग्य है।


2

अवधारणा का प्रमाण, मजाकिया चरित्रों को नहीं संभालता है, मानता है कि पहला विस्तार सही है।

file --mime-type -N *|sed \
   -e 's!^\(.*: \)\(.*\)$!echo \1;grep -e \2 /etc/mime.types!e' \
   -e 's!\n.*/[^     ]\+[    ]\+\([^ ]\+\).*! \1!' \
   -e 's!\n\(.*/[^     ]\)\+!\1!'

यह भी मानता है कि ग्नू
सेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.