2013-05-20 16 views
6

Sono in grado di identificare i tipi di file con il comando file. Posso ottenere l'estensione predefinita (preferita) per il file?Ottieni l'estensione file predefinita/preferita

Per esempio per

tmp_206.file: GIF image data, version 89a, 17 x 17 
tmp_202.file: ASCII text, with very long lines, with no line terminators 

sarebbe .gif e .txt

So estensioni non contano per UNIX, ma sono importanti per me

+3

Ci non è un'estensione di default. Ma: i server HTTP tentano di associare estensioni a tipi mime. Puoi [riutilizzare tale mappatura per scegliere un'estensione probabile] (http://stackoverflow.com/questions/7609208/complete-list-of-mime-type-file-extension-mapping). –

+2

È possibile ottenere il tipo mime con 'file --mime-type '. –

+0

@Banthar si hai ragione, ho rimosso il mio commento dopo aver capito che :) – robertklep

risposta

0

Se si dispone di un insieme ragionevolmente limitata di estensioni, la creazione di un mapping dall'output file all'estensione preferita non è difficile.

case $(file - <"$file") in 
    '-: GIF image'*) ext=gif ;; 
    '-: ASCII text'*) ext=txt ;; 
    # etc 
esac 
2

Alcuni tipi di file supportano più di 1 estensione come jpe, jpeg, jpg, ecc per i file JPEG.

Cosa si può fare è quello di ottenere tipo MIME primo utilizzo:

mimleType=$(awk -F';' 'NF>1{print $1}' < <(file -bi logo.jpeg)) 

quindi utilizzare questo awk per ottenere estensione del file:

awk -v mt=$mimeType '$1==mt{print $2}' /Applications/MAMP/conf/apache/mime.types 

USCITA:

jpeg