Nasıl Linux / Unix dosya türüne göre dosya uzantıları eklemek için?

oy
12

Bu Unix kabuk komut dosyası (herhangi bir kabuk) ile ilgili soru, ancak diğer standart kodlama dili çözümü de mutluluk duyacağız:

Ben dosya adları böyle karma değerlerdir dosyaların tam bir dizin var:

fd73d0cf8ee68073dce270cf7e770b97
fec8047a9186fdcc98fdbfc0ea6075ee

Bu dosyalar vb pdf png, zip, doc gibi farklı orijinal dosya türleri

Herkes onlar muhtemelen çıkışına dayanarak, onların uygun dosya uzantısını almak böylece dosyaları yeniden adlandırmak olacak bir komut dosyası sağlayabilir filekomuta?

Cevap:

JF Sebastian'ın komut dosya adları her iki çıktıya hem de gerçek yeniden adlandırma için çalışacaktır.

Oluştur 09/12/2008 saat 15:10
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
12

Kullanabilirsiniz

file -i filename

Bir MIME türü alır. Potansiyel bir listede türünü arama ve ardından bir uzantı eklemek olabilir. Bir bulabilirsiniz MIME türlerinin listesini ve örnek dosya uzantıları net.

Cevap 09/12/2008 saat 15:13
kaynak kullanıcı

oy
7

CSI yanıtını takiben:

Kullanabilirsiniz

file -i filename

Bir MIME türü alır. Potansiyel bir listede türünü arama ve ardından bir uzantı eklemek olabilir. Sen MIME türlerinin listesini bulmak ve net dosya uzantıları önerdi edebilirsiniz.

Sana çıktısını alan bir senaryo yazmaya öneririm file -i filename(boşluklarla ilgili bölünmüş bir tablo dosyasında '/', aramak bu terimi bulmak) ve uzantı döndüren seçtiğiniz dilde - en fazla birkaç satır. O zaman bir şey gibi yapabilirsiniz:

ls | while read f; do mv "$f" "$f".`file -i "$f" | get_extension.py`; done

bash veya bash komut olduğunu atmak. Ya get_extension komut büyük yapmak, ama bu, ilgili uzantının daha az kullanışlı bir dahaki sefere yapar.

Düzenleme: den değişim for f in *için ls | while read fikinci boşluk olan dosya işlemesi nedeniyle (Windows üzerinde belirli bir kabus).

Cevap 09/12/2008 saat 15:33
kaynak kullanıcı

oy
11

İşte Mimetypes' versiyonu var:

#!/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)

Örnek:

$ Ls * .file? | piton 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

@csl' yanıtını aşağıdaki @Phil H'nin yanıtını takiben:

#!/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')

İşte eski python en sürümleri (test) için parçacık İşte:

#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

Bu Python 2.3.5 (sanırım) çalışması gerekir.

Cevap 09/12/2008 saat 15:47
kaynak kullanıcı

oy
2

Tabii ki, hatta tamamen yanlış ( "veri"? Ne) sadece dosyasını temel MIME türüne karar (1) çıkış çok / yanlış belirsiz olabilir eklenmelidir ...

Cevap 09/12/2008 saat 15:51
kaynak kullanıcı

oy
0

Keltia ile mutabık kalarak ve onun cevabını bazı başka ayrıntı:

Kendine iyi bak - bazı dosya türleri sorunlu olabilir. JPEG2000 , örneğin.
Ve diğerleri çok fazla bilgi herhangi bir seçenek etiketleri olmadan "dosyasını" komutunu verilen döndürebilir. Yol önlemek bu bilgilerin kısa bir dönüş için "dosya -b" kullanmaktır.

BZT

Cevap 28/02/2010 saat 23:40
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more