Shell

如何確定文件的正常文件副檔名

  • November 26, 2013

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

這與@hildred 的回答基本思想相同,但使用了更簡單的方法(gawk)並進行了修改以處理包含空格和未知文件類型的文件名。

將這些行添加到 shell 的初始化文件中(~/.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可執行文件),它將返回“未知副檔名” 。

引用自:https://unix.stackexchange.com/questions/102632