В скрипте можно использовать wmctrl
, xprop
и awk
, чтобы использовать время активации, поддерживаемое оконным менеджером. (См., например,. wm -спец. 1.5). Например, используйте (многострочную -строку )командную строку, как показано ниже:
W=$(wmctrl -l | \
awk '$ ~ "Terminal" {print $1;}' | while read x ; do \
echo "$x $(xprop -id $(xprop -id $x \
| awk '$1 ~ /_NET_WM_USER_TIME/ {print $NF}' \
) \
| awk '{print $NF}' \
)" ; \
done | awk '$2>t {i=$1; t=$2} END {print i}' \
)
Прописью:
wmctrl
через фильтрацию, чтобы выбрать идентификаторы окон названного приложения («Терминал» в приведенном выше примере ); тогда xprop
, чтобы получить (поддельный )идентификатор окна для последнего времени использования, и xprop
для получения этой временной метки, которая является (единственным )свойством "окна-притворства" _NET_WM_USER_TIME_WINDOW
исходного окна; тогда awk
, который сообщает идентификатор с наибольшей отметкой времени. В проекте ImageMagick есть средства для идентификации изображений.
Я постоянно использую ImageMagick, в том числе его функцию «идентификации» из командной строки, и она ни разу не подвела для идентификации изображения.
Обратите внимание, что это дает гораздо больше, чем просто формат, например:
$ identify tmp3.jpg
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb
$ identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb
Вы уже получили правильную команду, так как все, что она делает, это оценивает тип MIME через libmagic
. Его единственной целью является распознавание типов файлов с шаблонами , заданными соответствующим форматом файла . Так что ничего лучше не найдете. Вы даже можете добавить собственные расширения для файлов, которые не распознаются правильно. (в магию, а не в командный файл)
Использование file
является надежным методом определения типов файлов. Он полагается не на расширения файлов, а скорее на «магические числа»; начало содержимого файла.
Чтобы сделать ваш процесс более надежным, вы можете напрямую использовать libmagic
. Таким образом, если по какой-то причине формат вывода file
изменится, это не повлияет на вас. Однако это означает, что вам нужно будет написать свой сценарий на языке, который может вызывать функции в библиотеке C.