以下是mimetypes的版本:#!/usr/bin/env python

"""It is a `filename -> filename.ext` filter.

`ext` is mime-based.

"""

import fileinput

import mimetypes

import os

import sys

from subprocess import Popen, PIPE

if len(sys.argv) > 1 and sys.argv[1] == '--rename':

do_rename = True

del sys.argv[1]

else:

do_rename = False

for filename in (line.rstrip() for line in fileinput.input()):

output, _ = Popen(['file', '-bi', filename], stdout=PIPE).communicate()

mime = output.split(';', 1)[0].lower().strip()

ext = mimetypes.guess_extension(mime, strict=False)

if ext is None:

ext = os.path.extsep + 'undefined'

filename_ext = filename + ext

print filename_ext

if do_rename:

os.rename(filename, filename_ext)

示例:$ ls *.file? | python add-ext.py --rename

avi.file.avi

djvu.file.undefined

doc.file.dot

gif.file.gif

html.file.html

ico.file.obj

jpg.file.jpe

m3u.file.ksh

mp3.file.mp3

mpg.file.m1v

pdf.file.pdf

pdf.file2.pdf

pdf.file3.pdf

png.file.png

tar.bz2.file.undefined

遵循@Phil H的响应,遵循@csl的响应:#!/usr/bin/env python

"""It is a `filename -> filename.ext` filter.

`ext` is mime-based.

"""

# Mapping of mime-types to extensions is taken form here:

# http://as3corelib.googlecode.com/svn/trunk/src/com/adobe/net/MimeTypeMap.as

mime2exts_list = [

["application/andrew-inset","ez"],

["application/atom+xml","atom"],

["application/mac-binhex40","hqx"],

["application/mac-compactpro","cpt"],

["application/mathml+xml","mathml"],

["application/msword","doc"],

["application/octet-stream","bin","dms","lha","lzh","exe","class","so","dll","dmg"],

["application/oda","oda"],

["application/ogg","ogg"],

["application/pdf","pdf"],

["application/postscript","ai","eps","ps"],

["application/rdf+xml","rdf"],

["application/smil","smi","smil"],

["application/srgs","gram"],

["application/srgs+xml","grxml"],

["application/vnd.adobe.apollo-application-installer-package+zip","air"],

["application/vnd.mif","mif"],

["application/vnd.mozilla.xul+xml","xul"],

["application/vnd.ms-excel","xls"],

["application/vnd.ms-powerpoint","ppt"],

["application/vnd.rn-realmedia","rm"],

["application/vnd.wap.wbxml","wbxml"],

["application/vnd.wap.wmlc","wmlc"],

["application/vnd.wap.wmlscriptc","wmlsc"],

["application/voicexml+xml","vxml"],

["application/x-bcpio","bcpio"],

["application/x-cdlink","vcd"],

["application/x-chess-pgn","pgn"],

["application/x-cpio","cpio"],

["application/x-csh","csh"],

["application/x-director","dcr","dir","dxr"],

["application/x-dvi","dvi"],

["application/x-futuresplash","spl"],

["application/x-gtar","gtar"],

["application/x-hdf","hdf"],

["application/x-javascript","js"],

["application/x-koan","skp","skd","skt","skm"],

["application/x-latex","latex"],

["application/x-netcdf","nc","cdf"],

["application/x-sh","sh"],

["application/x-shar","shar"],

["application/x-shockwave-flash","swf"],

["application/x-stuffit","sit"],

["application/x-sv4cpio","sv4cpio"],

["application/x-sv4crc","sv4crc"],

["application/x-tar","tar"],

["application/x-tcl","tcl"],

["application/x-tex","tex"],

["application/x-texinfo","texinfo","texi"],

["application/x-troff","t","tr","roff"],

["application/x-troff-man","man"],

["application/x-troff-me","me"],

["application/x-troff-ms","ms"],

["application/x-ustar","ustar"],

["application/x-wais-source","src"],

["application/xhtml+xml","xhtml","xht"],

["application/xml","xml","xsl"],

["application/xml-dtd","dtd"],

["application/xslt+xml","xslt"],

["application/zip","zip"],

["audio/basic","au","snd"],

["audio/midi","mid","midi","kar"],

["audio/mpeg","mp3","mpga","mp2"],

["audio/x-aiff","aif","aiff","aifc"],

["audio/x-mpegurl","m3u"],

["audio/x-pn-realaudio","ram","ra"],

["audio/x-wav","wav"],

["chemical/x-pdb","pdb"],

["chemical/x-xyz","xyz"],

["image/bmp","bmp"],

["image/cgm","cgm"],

["image/gif","gif"],

["image/ief","ief"],

["image/jpeg","jpg","jpeg","jpe"],

["image/png","png"],

["image/svg+xml","svg"],

["image/tiff","tiff","tif"],

["image/vnd.djvu","djvu","djv"],

["image/vnd.wap.wbmp","wbmp"],

["image/x-cmu-raster","ras"],

["image/x-icon","ico"],

["image/x-portable-anymap","pnm"],

["image/x-portable-bitmap","pbm"],

["image/x-portable-graymap","pgm"],

["image/x-portable-pixmap","ppm"],

["image/x-rgb","rgb"],

["image/x-xbitmap","xbm"],

["image/x-xpixmap","xpm"],

["image/x-xwindowdump","xwd"],

["model/iges","igs","iges"],

["model/mesh","msh","mesh","silo"],

["model/vrml","wrl","vrml"],

["text/calendar","ics","ifb"],

["text/css","css"],

["text/html","html","htm"],

["text/plain","txt","asc"],

["text/richtext","rtx"],

["text/rtf","rtf"],

["text/sgml","sgml","sgm"],

["text/tab-separated-values","tsv"],

["text/vnd.wap.wml","wml"],

["text/vnd.wap.wmlscript","wmls"],

["text/x-setext","etx"],

["video/mpeg","mpg","mpeg","mpe"],

["video/quicktime","mov","qt"],

["video/vnd.mpegurl","m4u","mxu"],

["video/x-flv","flv"],

["video/x-msvideo","avi"],

["video/x-sgi-movie","movie"],

["x-conference/x-cooltalk","ice"]]

#NOTE: take only the first extension

mime2ext = dict(x[:2] for x in mime2exts_list)

if __name__ == '__main__':

import fileinput, os.path

from subprocess import Popen, PIPE

for filename in (line.rstrip() for line in fileinput.input()):

output, _ = Popen(['file', '-bi', filename], stdout=PIPE).communicate()

mime = output.split(';', 1)[0].lower().strip()

print filename + os.path.extsep + mime2ext.get(mime, 'undefined')

以下是旧python版本(未测试)的代码片段:#NOTE: take only the first extension

mime2ext = {}

for x in mime2exts_list:

mime2ext[x[0]] = x[1]

if __name__ == '__main__':

import os

import sys

# this version supports only stdin (part of fileinput.input() functionality)

lines = sys.stdin.read().split('\n')

for line in lines:

filename = line.rstrip()

output = os.popen('file -bi ' + filename).read()

mime = output.split(';')[0].lower().strip()

try: ext = mime2ext[mime]

except KeyError:

ext = 'undefined'

print filename + '.' + ext

它应该可以在Python2.3.5上工作(我想)。

linux 怎么添加文件类型,如何在Linux/Unix上添加基于文件类型的文件扩展名?相关推荐

  1. android 首选网络类型,如何在adb android上更改首选网络类型? - 程序园

    这适用于我的设备: adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "up ...

  2. 直接读取ftp服务器文件,如何在ftp服务器上只读取十二个文件?

    如何只读取12个文件导致我只读取ftp 服务器中的所有文件,每4分钟文件添加一个新文件.如何在ftp服务器上只读取十二个文件? 感谢您的帮助,我是初学者在API编程:) if(files.length ...

  3. linux下载带中文名的文件夹,如何在Linux下删除文件名是乱码或者带有特殊字符的文件...

    今天遇到一个问题,一个文件名是"-MXV9.log",直接用rm删除的时候就报错 [localhost]rm -MXV9.log rm: illegal option -- M r ...

  4. 如何在Android手机上添加“Recycle Bin”?

    我们电脑里的回收箱是我们一直在找的东西.它作为一种备份,我们将始终访问我们删除的文件,无论是否意外.毫无疑问,它请继续阅读,了解如何在Android设备上添加一个. 还有一些应用可以帮助您在Andro ...

  5. 如何在H5页面上添加音乐播放

    在制作网页的时候,经常会遇到一些带音乐播放的场景,作品的右上角有一个音频按钮,会播放音乐,点击切换播放和暂停.下面就讲一讲如何在h5网页上添加音乐播放. 其实是很简单的,只需要简单几步就可以完成了 1 ...

  6. html5中加入音乐怎么弄,如何在H5页面上添加音乐播放

    在制作网页的时候,经常会遇到一些带音乐播放的场景,作品的右上角有一个音频按钮,会播放音乐,点击切换播放和暂停.下面就讲一讲如何在h5网页上添加音乐播放. 其实是很简单的,只需要简单几步就可以完成了 1 ...

  7. 如何在Mac电脑上添加或删除受信任的电话号码?

    受信任的电话号码用于在其他设备或浏览器登陆时验证您的身份,获取验证码在另一设备上登陆.那我们如何在Mac电脑上添加或删除受信任的电话号码呢?小编给大家带来了详细的图文教程,需要的朋友欢迎参考操作! 具 ...

  8. 如何在Apple Watch上添加闹钟?

    在Apple Watch上使用"闹钟" App,可以让 Apple Watch 在设定的时间播放声音或振动.那我们如何在Apple Watch上添加闹钟呢?感兴趣的朋友快和小编一起 ...

  9. linux 怎么不检查gpg,如何在Linux上使用GPG加密和解密文件 | MOS86

    如何在Linux上使用GPG加密和解密文件... GnuPrivacy Guard (GPG) allows you to securely encrypt files so that only th ...

  10. linux桌面添加软件快捷方式,如何在 Ubuntu 桌面手动添加应用快捷方式

    原标题:如何在 Ubuntu 桌面手动添加应用快捷方式 在这篇快速指南中,你将学到如何在 Ubuntu 桌面和其他使用 GNOME 桌面的发行版中添加应用图标. -- Abhishek Prakash ...

最新文章

  1. 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
  2. [C#] 查标准正态分布表
  3. video视频播放以及主流浏览器兼容
  4. 【转】windows Server2012安装iis
  5. 在ASP.NET中使用Global.asax文件
  6. Svn正确的使用方法
  7. c# 从一组数中随机抽取一定个数_Python随机模块22个函数详解
  8. 记,NSProxy需要实现哪些方法?
  9. 大数据好还是不好_学python好还是大数据好?想学IT,但有点搞不清方向的人可以看看...
  10. linux nginx 清除缓存文件,linux nginx 内置缓存怎么去掉
  11. h5和web前端的区别
  12. 亟需为个人信息安全“保驾护航”
  13. 使用Kotlin的Android菜单
  14. Servlet之间的跳转(MVC模式)
  15. uniapp跳转指定小程序
  16. 真相了!关于“写书”这件事
  17. linux用mame玩游戏,Ubuntu下用xmame玩街机游戏
  18. 修改win服务器防火墙端口号,Windows Server 修改防火墙和远程桌面(3389)默认端口...
  19. 网页JS自动化脚本(一)安装油猴或暴力猴等脚本管理器并新建脚本
  20. 计算机专业老师考什么教师,老师!计算机专业的考试也太太太太太太难了!

热门文章

  1. javascript 常用代码技巧大收集
  2. linux 集成 3g 模块 串口 option,华为等 3G、4G模块拨号上网过程分析
  3. JAVA继承类初始化顺序
  4. window和Linux下安装JDK配置环境变量
  5. 【更新】ReSharper v2018.3发布
  6. 遍历查询+从非根节点开始遍历+从下向上遍历树+从层次化查询中删除节点和分支...
  7. CloudStack升级中文指南:4.1.x/4.2.x 至4.3版本
  8. 304 Not Modified 的意思 (Web的Cache问题)
  9. 使用web.xml控制Web应用的行为
  10. Silverlight入门