EnglishРусский Map

Квалификаторы glob в Zsh

title
Квалификаторы glob в Zsh
type
summary
summary
Трюк с квалификатором glob (om[1]) в Zsh: выбор самого свежего файла прямо в команде без конвейеров
tags
zsh, shell, cli
created
2026-04-08
updated
2026-04-08
lang
ru
translation_of
zsh-glob-qualifiers
source_updated
2026-04-08
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Квалификаторы glob в Zsh - это суффикс в круглых скобках, который можно добавить к любому шаблону glob для фильтрации, сортировки или среза подходящих файлов. Это одно из самых полезных преимуществ Zsh перед bash, а шаблон (om[1]) решает частую проблему: как выбрать самый свежий файл, не зная его точного имени.

Шаблон om[1]

Добавьте (om[1]) к glob-шаблону, чтобы получить один самый свежий совпавший файл:

  • o - отсортировать результаты
  • m - по времени изменения, самые свежие первыми
  • [1] - взять только первый
# open the most recent screenshot
open ~/Screenshots/*.png(om[1])

# pass the newest log file to less
less /var/log/app-*.log(om[1])

Это избавляет от танцев с ls -t | head -1 и работает прямо в команде - без подоболочек, без конвейеров, просто glob с квалификатором.

Цепочки команд со сгенерированными файлами

В статье Адама Джонсона показан рабочий процесс с memray, где каждая команда создаёт файл, необходимый следующей команде, причём с непредсказуемым PID в имени:

memray run manage.py check \
  && memray flamegraph memray-*.bin(om[1]) \
  && open -a Firefox memray-flamegraph-*.html(om[1])

Каждый шаг подхватывает то, что только что создал предыдущий. Никакого ручного копирования имён файлов.

Другие полезные квалификаторы

Возможности квалификаторов glob выходят далеко за рамки сортировки. Вот несколько распространённых:

Квалификатор Значение
. только обычные файлы
/ только каталоги
@ только символические ссылки
om сортировка по времени изменения (свежие первыми)
On сортировка по имени
OL сортировка по размеру (большие первыми)
[1,5] взять совпадения с 1 по 5
Lm+10 файлы больше 10 МБ
mh-1 изменённые за последний час

Квалификаторы можно комбинировать: *.log(.om[1]Lm+1) означает "самый свежий обычный файл по маске *.log размером больше 1 МБ".

Почему это важно

Сценарии в командной строке часто создают файлы с динамическими именами - PID, временными метками, UUID. Обычный обходной путь - сохранить имя файла в переменную или передать через конвейер в ls -t. Квалификаторы glob позволяют выразить "самое свежее совпадение" прямо в самом шаблоне, что лучше сочетается с цепочками && и сохраняет читаемость команды.