Shell
如何確定文件的正常文件副檔名
該
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
可執行文件),它將返回“未知副檔名” 。