Я наткнулся на проект, названный экранной сессией. Это позволяет Вам сохранять и перезагружать Экранные сессии GNU в некоторой степени.
Расширения файла, зарегистрированные в Вашей системе, должны быть в /etc/mime.types
. Так, принятию Вас удалось извлечь тип файла из вывода file
в названную переменную type
, Вы можете просто:
grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
или (как предложено 200_success в комментариях), можно использовать awk
один:
awk -v IGNORECASE=1 '/ENVIRON["type"]/{$1="";print $0}'
Пример
$ type=Perl
$ grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
pl pm
Это - та же основная идея как ответ @hildred, но использование более простого подхода (gawk
) и измененный для контакта с именами файлов, содержащими пробелы и неизвестные типы файлов.
Добавьте эти строки к файлу инициализации своей оболочки (~/.bashrc
например, если Вы работаете 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
}
Можно теперь выполнить его как это:
$ 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
Это возвратит 'неизвестное расширение' для файлов, которые не имеют никакого связанного расширения в /etc/mime.types
такой как cp
который является исполняемым файлом.
подтверждение концепции, не обрабатывает забавные символы, предполагает, что первое расширение является правильным.
file --mime-type -N *|sed \
-e 's!^\(.*: \)\(.*\)$!echo \1;grep -e \2 /etc/mime.types!e' \
-e 's!\n.*/[^ ]\+[ ]\+\([^ ]\+\).*! \1!' \
-e 's!\n\(.*/[^ ]\)\+!\1!'
grep | awk
может обычно делаться с помощьюawk
один. – 200_success 26.11.2013, 19:33grep
будет иметь тенденцию быть быстрее, чемawk
это должно проверить regex на каждую строку. – terdon♦ 27.11.2013, 02:40