Язык запросов Cardinal намеренно близок к синтаксису Everything, но отражает то, что текущий движок действительно реализует. Эта страница — эталонная справка о том, что сегодня понимает Rust‑бэкенд.
English · Español · 한국어 · Русский · 简体中文 · 繁體中文 · Português · Italiano · 日本語 · Français · Deutsch · Українська · العربية · हिन्दी · Türkçe
- Каждый запрос парсится в дерево из:
- Слов / фраз (обычный текст, строки в кавычках, подстановки),
- Фильтров (
ext:,type:,dm:,content:, …), - Логических операторов (
AND,OR,NOT/!).
- Сопоставление ориентировано на компоненты пути:
- Слова, фразы и подстановки без
/совпадают с собственным именем файла или папки. - Токены, разделённые
/, совпадают с непрерывной цепочкой компонентов пути и возвращают элемент, совпавший с последним сегментом. - Логические операторы комбинируют наборы результатов для одного и того же индексированного элемента;
foo barозначает, что один элемент должен совпасть с обоими токенами, а не что его предки могут удовлетворять одному токену, а базовое имя другому.
- Слова, фразы и подстановки без
- Чувствительность к регистру управляется переключателем в UI:
- В режиме без учета регистра движок приводит к нижнему регистру и запрос, и кандидаты для совпадений по имени/контенту.
- В режиме с учетом регистра движок сравнивает байты как есть.
Быстрые примеры:
report draft # файлы или папки, собственное имя которых содержит и “report”, и “draft”
ext:pdf briefing # PDF-файлы, в имени которых есть “briefing”
parent:/Users demo!.psd # под /Users исключить .psd файлы
regex:^Report.*2025$ # имена, совпадающие с regex
ext:png;jpg travel|vacation # PNG или JPG, имена которых содержат “travel” или “vacation”
- Токен без кавычек и без
/— это поиск по подстроке в одном компоненте пути:demoсовпадает с папкой/Users/demoи с/Users/alice/demo-notes.md.- Он не совпадает с
/Users/demo/Projects/cardinal.mdтолько потому, что предок называетсяdemo; используйтеdemo/**, чтобы искать потомков.
- Фразы в двойных кавычках совпадают с точной последовательностью, включая пробелы:
"Application Support"совпадает с/Library/Application Support.
- Переключатель регистра в UI применяется к обоим.
*соответствует нулю или большему числу символов.?соответствует ровно одному символу.**— это globstar, который пересекает любое число сегментов папок, когда стоит между слэшами.- Подстановки распознаются внутри одного токена:
*.rs— любое имя, оканчивающееся на.rs.report-??.txt—report-01.txt,report-AB.txtи т. д.a*b— имена, начинающиеся наaи заканчивающиеся наb.src/**/Cargo.toml—Cargo.tomlгде угодно подsrc/.
- Как и простые токены, подстановки без
/сопоставляются с компонентами пути. Цепочка подстановок со слешами, напримерsrc/**/Cargo.toml, возвращает совпавшие элементыCargo.toml, аsrc/**возвращает потомков под совпавшими папкамиsrc. - Если нужен буквальный
*или?, заключите токен в кавычки:"*.rs". Globstar должен быть отдельным сегментом слеша (foo/**/bar,/Users/**,**/notes).
Cardinal понимает “сегменты со слешами” внутри токена и классифицирует каждый сегмент как префиксное/суффиксное/точное/подстрочное совпадение по компонентам пути. Примеры:
elloworl → Substring("elloworl")
/root → Prefix("root")
root/ → Suffix("root")
/root/ → Exact("root")
/root/bar → Exact("root"), Prefix("bar")
/root/bar/kksk → Exact("root"), Exact("bar"), Prefix("kksk")
foo/bar/kks → Suffix("foo"), Exact("bar"), Prefix("kks")
gaea/lil/bee/ → Suffix("gaea"), Exact("lil"), Exact("bee")
bab/bob/ → Suffix("bab"), Exact("bob")
/byb/huh/good/ → Exact("byb"), Exact("huh"), Exact("good")
Это позволяет выражать:
- «Папка должна заканчиваться на X» (
foo/), - «Папка должна начинаться с X» (
/foo), - «Точное имя папки в середине пути» (
gaea/lil/bee/).
Cardinal следует приоритетам Everything:
NOT/!имеет самый высокий приоритет,OR/|следующий,- неявный / явный
AND(«пробел») имеет самый низкий приоритет.
| Синтаксис | Значение |
|---|---|
foo bar |
foo AND bar — оба токена должны совпасть. |
foo|bar |
foo OR bar — может совпасть любой. |
foo OR bar |
Словесная форма ` |
!temp |
NOT temp — исключает совпадения. |
NOT temp |
То же, что !temp. |
( ... ) |
Группировка скобками. |
< ... > |
Группировка угловыми скобками (стиль Everything). |
Примеры приоритетов:
foo bar|baz # разбирается как foo AND (bar OR baz)
!(ext:zip report) # исключает элементы, где совпадают ext:zip И “report”
good (<src|tests> ext:rs)
# good AND ((src OR tests) AND ext:rs)
Используйте скобки или <...>, когда нужно переопределить приоритет по умолчанию.
В этом разделе перечислены только фильтры, которые текущий движок действительно вычисляет.
Примечание: аргументы фильтра должны идти сразу после двоеточия (
ext:jpg,parent:/Users/demo). Записьfile: *.mdвставляет пробел, поэтому Cardinal трактует это как фильтрfile:(без аргумента), за которым следует отдельный токен*.md.
| Фильтр | Значение | Пример |
|---|---|---|
file: |
Только файлы (не папки) | file: report |
folder: |
Только папки | folder:Projects |
Их можно комбинировать с другими терминами:
folder:Pictures vacation
file: invoice dm:pastyear
ext:принимает одно или несколько расширений, разделенных;:ext:jpg— изображения JPEG.ext:jpg;png;gif— распространенные форматы веб‑изображений.
- Сопоставление не чувствительно к регистру и не включает точку.
Примеры:
ext:md content:"TODO"
ext:pdf briefing parent:/Users/demo/Reports
ext:png;jpg travel|vacation
| Фильтр | Значение | Пример |
|---|---|---|
parent: |
Только прямые дочерние элементы указанной папки | parent:/Users/demo/Documents ext:md |
infolder:/in: |
Любой потомок указанной папки (рекурсивно) | in:/Users/demo/Projects report draft |
nosubfolders: |
Папка сама плюс прямые дочерние файлы (без подпапок) | nosubfolders:/Users/demo/Projects ext:log |
Эти фильтры принимают абсолютный путь в качестве аргумента; начальный ~ разворачивается в домашний каталог пользователя. Поиск пути следует переключателю регистра в UI: когда сопоставление с учетом регистра выключено, каждый сегмент пути может совпадать без учета регистра.
type: группирует расширения файлов по смысловым категориям. Поддерживаемые категории (без учета регистра, с синонимами) включают:
- Изображения:
type:picture,type:pictures,type:image,type:images,type:photo,type:photos - Видео:
type:video,type:videos,type:movie,type:movies - Аудио:
type:audio,type:audios,type:music,type:song,type:songs - Документы:
type:doc,type:docs,type:document,type:documents,type:text,type:office - Презентации:
type:presentation,type:presentations,type:ppt,type:slides - Таблицы:
type:spreadsheet,type:spreadsheets,type:xls,type:excel,type:sheet,type:sheets - PDF:
type:pdf - Архивы:
type:archive,type:archives,type:compressed,type:zip - Код:
type:code,type:source,type:dev - Исполняемые файлы:
type:exe,type:exec,type:executable,type:executables,type:program,type:programs,type:app,type:apps
Примеры:
type:picture vacation
type:code "Cardinal"
type:archive dm:pastmonth
Сокращения для распространенных случаев type::
| Макрос | Эквивалент | Пример |
|---|---|---|
audio: |
type:audio |
audio: piano |
video: |
type:video |
video: tutorial |
doc: |
type:doc |
doc: invoice dm:2024 |
exe: |
type:exe |
exe: "Cardinal" |
Макросы принимают необязательный аргумент:
audio:soundtrack
video:"Keynote"
size: поддерживает:
- Сравнения:
>,>=,<,<=,=,!= - Диапазоны:
min..max - Ключевые слова:
empty,tiny,small,medium,large,huge,gigantic,giant - Единицы: bytes (
b), kilobytes (k,kb,kib,kilobyte[s]), megabytes (m,mb,mib,megabyte[s]), gigabytes (g,gb,gib,gigabyte[s]), terabytes (t,tb,tib,terabyte[s]), petabytes (p,pb,pib,petabyte[s]).
Примеры:
size:>1GB # больше 1 GB
size:1mb..10mb # между 1 MB и 10 MB
size:tiny # 0–10 KB (приблизительный диапазон по ключевому слову)
size:empty # ровно 0 байт
dm:/datemodified:— дата изменения.dc:/datecreated:— дата создания.
Они принимают:
-
Ключевые слова (относительные диапазоны):
today,yesterdaythisweek,lastweekthismonth,lastmonththisyear,lastyearpastweek,pastmonth,pastyear
-
Абсолютные даты:
YYYY-MM-DD,YYYY/MM/DD,YYYY.MM.DD- Также поддерживаются распространенные форматы день‑сначала / месяц‑сначала, такие как
DD-MM-YYYYиMM/DD/YYYY.
-
Диапазоны и сравнения:
- Диапазоны:
dm:2024-01-01..2024-12-31 - Сравнения:
dm:>=2024-01-01,dc:<2023/01/01
- Диапазоны:
Примеры:
dm:today # изменено сегодня
dc:lastyear # создано в прошлом календарном году
dm:2024-01-01..2024-03-31 # изменено в Q1 2024
dm:>=2024/01/01 # изменено начиная с 2024-01-01
regex: воспринимает оставшуюся часть токена как регулярное выражение, применяемое к компоненту пути (имени файла или папки).
Примеры:
regex:^README\\.md$ parent:/Users/demo
regex:Report.*2025
Переключатель регистра в UI влияет на совпадения regex.
content: сканирует содержимое файлов на простую подстроку:
- В
content:нет regex — это совпадение подстроки по байтам. - Чувствительность к регистру следует переключателю UI:
- В режиме без учета регистра и строка поиска, и сканируемые байты приводятся к нижнему регистру.
- В режиме с учетом регистра байты сравниваются как есть.
- Очень короткие подстроки разрешены, но
""(пустая) отклоняется.
Примеры:
*.md content:"Bearer "
ext:md content:"API key"
in:/Users/demo/Projects content:deadline
type:doc content:"Q4 budget"
Сопоставление содержимого выполняется потоково по файлу; многобайтовые последовательности могут пересекать границы буфера.
Фильтрует по тегам Finder (macOS). Cardinal запрашивает теги по необходимости из метаданных файла (без кэша) и для больших наборов результатов использует mdfind, чтобы сузить кандидатов перед применением сопоставления тегов.
- Принимает один или несколько тегов, разделенных
;(логическое OR):tag:ProjectA;ProjectB. - Можно цепочкой использовать несколько фильтров
tag:(логическое AND) для много-тегового совпадения:tag:Project tag:Important. - Чувствительность к регистру следует переключателю UI.
- Имена тегов сопоставляются по подстроке:
tag:projсовпадает сProjectиproject.
Примеры:
tag:Important
t:Urgent
tag:ProjectA;ProjectB report
tag:Project tag:Archive report
in:/Users/demo/Documents tag:"Q4"
Несколько реалистичных комбинаций:
# Markdown-заметки в Documents (без PDF)
parent:/Users/demo/Documents ext:md
parent:/Users/demo/Documents !ext:pdf
# PDF в Reports с упоминанием “briefing”
ext:pdf briefing parent:/Users/demo/Reports
# Фото из отпуска
type:picture vacation
ext:png;jpg travel|vacation
# Свежие лог-файлы внутри дерева проекта
in:/Users/demo/Projects ext:log dm:pastweek
# Shell-скрипты напрямую под папкой Scripts
parent:/Users/demo/Scripts *.sh
# Элементы, собственное имя которых содержит “Application Support”
"Application Support"
# Сопоставить конкретное имя файла через regex
regex:^README\\.md$ parent:/Users/demo
# Исключить PSD везде под /Users
in:/Users demo!.psd
Используйте эту страницу как авторитетный список операторов и фильтров, которые движок реализует сегодня; дополнительные возможности Everything (например, даты доступа/запуска или фильтры по атрибутам) разбираются на уровне синтаксиса, но сейчас отклоняются на этапе оценки.