Je prévois de télécharger une série d’images d’un site Web qui ne viennent pas avec une extension. Je souhaite donc en ajouter une en fonction du contenu du fichier ou du type MIME.
file <filename>
fait un excellent travail pour identifier le type de fichier, mais j'ai besoin de l'extension.
--extension
Print a slash-separated list of valid extensions for the file type found.
C'est de la part de file
La page de manuel de, mais cela ne semble pas fonctionner:
$ file --extension test_text_file.txt
test_text_file.txt: ???
$ file --extension test_png_file.png
test_png_file.png: ???
$ file --extension test_gif_file.gif
test_gif_file.gif: ???
Il imprime littéralement ???
pour chaque fichier que j'y passe, même ceux qui ont déjà une extension appropriée. Ce sont tous des fichiers valides de leurs types et sont parfaitement reconnus par file
sans pour autant --extension
.
Pourquoi file --extension
ne fonctionne pas pour moi et que puis-je utiliser pour obtenir une extension de fichier?
Une idée serait d'utiliser file --mime-type
puis créez un tableau de tableau de répartition qui mappe les types MIME connus avec leurs extensions, mais je préférerais de loin une solution plus simple et plus sûre.
la source
file
encontre????
pour chaque fichier.file-5.33
Réponses:
Pas seulement pour toi. Voir cette question . Un des commentaires semble juste:
Je n'ai trouvé aucun outil Unix standard pour effectuer la conversion, votre idée peut donc être la solution la plus simple.
Notez qu'une telle carte existe, c'est
/etc/mime.types
. Voir cette autre question sur Unix & amp; SE Linux . En me basant sur l’une des réponses, j’ai eu la fonction suivante:Usage:
Adaptez-le à vos besoins, faites-en un script, etc. Les principales préoccupations sont les suivantes:
0
), la sortie peut être non vide ou vide (même pas\n
).cut -d ' ' -f 1
pour en avoir au plus un, ce n'est peut-être pas celui que vous voulez.Donc, un fichier de carte personnalisé au lieu de
/etc/mime.types
peut être utile. Cette commande vous montrera quels types mime existent dans le répertoire courant (et les sous-répertoires):grep
ne doit pas correspondre plus d'une fois (au moins avec/etc/mime.types
)^
(début de ligne) et$'\t'
(onglet) sont là pour éviter la correspondance partielle. Utilisationgrep -m 1 ...
(ouhead -n 1
plus tard) pour être sûr que vous obtiendrez au plus une ligne.la source
/etc/mime.types
, cela fonctionne parfaitement pour moi.