La command de file
est bonne pour déterminer les types de files pour mes besoins. Y at-il un moyen de mapper ces résultats aux extensions de nom de file classiques?
Les extensions de file enregistrées sur votre système doivent être dans /etc/mime.types
. Donc, en supposant que vous avez réussi à extraire le type de file de la sortie du file
dans une variable appelée type
, vous pouvez simplement:
grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
ou (comme suggéré par 200_success dans les commentaires), vous pouvez utiliser awk
seul:
awk -v IGNORECASE=1 '/ENVIRON["type"]/{$1="";print $0}'
Exemple
$ type=Perl $ grep -i "$type" /etc/mime.types | awk '{$1="";print $0}' pl pm
C'est la même idée de base que la réponse de @hildred mais en utilisant une approche plus simple ( gawk
) et modifiée pour traiter les noms de files contenant des espaces et des types de files inconnus.
Ajoutez ces lignes au file d'initialisation de votre shell ( ~/.bashrc
par exemple, si vous exécutez 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 }
Vous pouvez maintenant l'exécuter comme ceci:
$ 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
Il renverra 'extension inconnue' pour les files qui n'ont pas d'extension associée dans /etc/mime.types
comme cp
qui est un exécutable.
preuve de concept, ne gère pas les personnages drôles, suppose que la première extension est correcte.
file --mime-type -N *|sed \ -e 's!^\(.*: \)\(.*\)$!echo \1;grep -e \2 /etc/mime.types!e' \ -e 's!\n.*/[^ ]\+[ ]\+\([^ ]\+\).*! \1!' \ -e 's!\n\(.*/[^ ]\)\+!\1!'