Квалификаторы glob в Zsh
- title
- Квалификаторы glob в Zsh
- type
- summary
- summary
- Трюк с квалификатором glob (om[1]) в Zsh: выбор самого свежего файла прямо в команде без конвейеров
- tags
- zsh, shell, cli
- sources
- zsh-om1-glob-qualifiers
- 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 позволяют выразить "самое свежее совпадение" прямо в самом шаблоне, что лучше сочетается с цепочками && и сохраняет читаемость команды.