El lenguaje de consulta de Cardinal es intencionalmente cercano a la sintaxis de Everything, pero refleja lo que el motor actual realmente implementa. Esta página es la referencia autorizada de lo que el backend en Rust entiende hoy.
English · Español · 한국어 · Русский · 简体中文 · 繁體中文 · Português · Italiano · 日本語 · Français · Deutsch · Українська · العربية · हिन्दी · Türkçe
- Cada consulta se analiza en un árbol de:
- Palabras / frases (texto plano, cadenas entre comillas, comodines),
- Filtros (
ext:,type:,dm:,content:, …), - Operadores booleanos (
AND,OR,NOT/!).
- La coincidencia se evalúa contra la ruta completa de cada archivo indexado, no solo el nombre base.
- La sensibilidad a mayúsculas se controla con el interruptor de la UI:
- Cuando es insensible a mayúsculas, el motor convierte a minúsculas tanto la consulta como los candidatos para coincidencias de nombre/contenido.
- Cuando es sensible a mayúsculas, el motor compara los bytes tal cual.
Ejemplos rápidos:
report draft # archivos cuya ruta contiene tanto “report” como “draft”
ext:pdf briefing # archivos PDF cuyo nombre contiene “briefing”
parent:/Users demo!.psd # bajo /Users, excluir archivos .psd
regex:^Report.*2025$ # nombres que coinciden con una regex
ext:png;jpg travel|vacation # PNG o JPG cuyos nombres contienen “travel” o “vacation”
- Un token sin comillas es una coincidencia por subcadena en la ruta:
democoincide con/Users/demo/Projects/cardinal.md.
- Las frases entre comillas dobles coinciden con la secuencia exacta, incluidos los espacios:
"Application Support"coincide con/Library/Application Support/....
- El interruptor de sensibilidad a mayúsculas de la UI se aplica a ambos.
*coincide con cero o más caracteres.?coincide con exactamente un carácter.**es un globstar que atraviesa cualquier número de segmentos de carpeta cuando aparece entre barras.- Los comodines se interpretan dentro de un solo token:
*.rs— cualquier nombre que termina en.rs.report-??.txt—report-01.txt,report-AB.txt, etc.a*b— nombres que empiezan conay terminan conb.src/**/Cargo.toml—Cargo.tomlen cualquier lugar bajosrc/.
- Si necesitas un
*o?literal, pon el token entre comillas:"*.rs". Los globstar deben ser segmentos de barra independientes (foo/**/bar,/Users/**,**/notes).
Cardinal entiende “segmentos con barra” dentro de un token y clasifica cada segmento como coincidencia de prefijo/sufijo/exacta/subcadena en los componentes de la ruta. Ejemplos:
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")
Esto te permite expresar:
- “La carpeta debe terminar con X” (
foo/), - “La carpeta debe empezar con X” (
/foo), - “Nombre de carpeta exacto en medio de la ruta” (
gaea/lil/bee/).
Cardinal sigue la precedencia de Everything:
NOT/!tiene la precedencia más alta,OR/|después,ANDimplícito / explícito (“espacio”) tiene la precedencia más baja.
| Sintaxis | Significado |
|---|---|
foo bar |
foo AND bar — ambos tokens deben coincidir. |
foo|bar |
foo OR bar — cualquiera puede coincidir. |
foo OR bar |
Forma escrita de ` |
!temp |
NOT temp — excluye coincidencias. |
NOT temp |
Igual que !temp. |
( ... ) |
Agrupación con paréntesis. |
< ... > |
Agrupación con corchetes angulares (estilo Everything). |
Ejemplos de precedencia:
foo bar|baz # se analiza como foo AND (bar OR baz)
!(ext:zip report) # excluye elementos donde coinciden ext:zip Y “report”
good (<src|tests> ext:rs)
# good AND ((src OR tests) AND ext:rs)
Usa paréntesis o <...> cuando quieras sobrescribir la precedencia predeterminada.
Esta sección solo enumera los filtros que el motor actual realmente evalúa.
Nota: los argumentos del filtro deben ir inmediatamente después de los dos puntos (
ext:jpg,parent:/Users/demo). Escribirfile: *.mdinserta un espacio en blanco, así que Cardinal lo trata como un filtrofile:(sin argumento) seguido del token separado*.md.
| Filtro | Significado | Ejemplo |
|---|---|---|
file: |
Solo archivos (no carpetas) | file: report |
folder: |
Solo carpetas | folder:Projects |
Se pueden combinar con otros términos:
folder:Pictures vacation
file: invoice dm:pastyear
ext:acepta una o más extensiones separadas por;:ext:jpg— imágenes JPEG.ext:jpg;png;gif— tipos de imagen web comunes.
- La coincidencia no distingue mayúsculas y no incluye el punto.
Ejemplos:
ext:md content:"TODO"
ext:pdf briefing parent:/Users/demo/Reports
ext:png;jpg travel|vacation
| Filtro | Significado | Ejemplo |
|---|---|---|
parent: |
Solo hijos directos de la carpeta indicada | parent:/Users/demo/Documents ext:md |
infolder:/in: |
Cualquier descendiente de la carpeta indicada (recursivo) | in:/Users/demo/Projects report draft |
nosubfolders: |
La carpeta en sí más los archivos hijos directos (sin subcarpetas) | nosubfolders:/Users/demo/Projects ext:log |
Estos filtros toman una ruta absoluta como argumento; un ~ inicial se expande al directorio de inicio del usuario.
type: agrupa extensiones de archivo en categorías semánticas. Las categorías admitidas (insensible a mayúsculas, con sinónimos) incluyen:
- Imágenes:
type:picture,type:pictures,type:image,type:images,type:photo,type:photos - Video:
type:video,type:videos,type:movie,type:movies - Audio:
type:audio,type:audios,type:music,type:song,type:songs - Documentos:
type:doc,type:docs,type:document,type:documents,type:text,type:office - Presentaciones:
type:presentation,type:presentations,type:ppt,type:slides - Hojas de cálculo:
type:spreadsheet,type:spreadsheets,type:xls,type:excel,type:sheet,type:sheets - PDF:
type:pdf - Archivos comprimidos:
type:archive,type:archives,type:compressed,type:zip - Código:
type:code,type:source,type:dev - Ejecutables:
type:exe,type:exec,type:executable,type:executables,type:program,type:programs,type:app,type:apps
Ejemplos:
type:picture vacation
type:code "Cardinal"
type:archive dm:pastmonth
Atajos para casos comunes de type::
| Macro | Equivalente a | Ejemplo |
|---|---|---|
audio: |
type:audio |
audio: piano |
video: |
type:video |
video: tutorial |
doc: |
type:doc |
doc: invoice dm:2024 |
exe: |
type:exe |
exe: "Cardinal" |
Las macros aceptan un argumento opcional:
audio:soundtrack
video:"Keynote"
size: admite:
- Comparaciones:
>,>=,<,<=,=,!= - Rangos:
min..max - Palabras clave:
empty,tiny,small,medium,large,huge,gigantic,giant - Unidades: 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]).
Ejemplos:
size:>1GB # mayor que 1 GB
size:1mb..10mb # entre 1 MB y 10 MB
size:tiny # 0–10 KB (rango aproximado por palabra clave)
size:empty # exactamente 0 bytes
dm:/datemodified:— fecha de modificación.dc:/datecreated:— fecha de creación.
Aceptan:
-
Palabras clave (rangos relativos):
today,yesterdaythisweek,lastweekthismonth,lastmonththisyear,lastyearpastweek,pastmonth,pastyear
-
Fechas absolutas:
YYYY-MM-DD,YYYY/MM/DD,YYYY.MM.DD- También admite formatos comunes día‑primero / mes‑primero como
DD-MM-YYYYyMM/DD/YYYY.
-
Rangos y comparaciones:
- Rangos:
dm:2024-01-01..2024-12-31 - Comparaciones:
dm:>=2024-01-01,dc:<2023/01/01
- Rangos:
Ejemplos:
dm:today # modificado hoy
dc:lastyear # creado el año calendario pasado
dm:2024-01-01..2024-03-31 # modificado en Q1 2024
dm:>=2024/01/01 # modificado desde 2024-01-01 en adelante
regex: trata el resto del token como una expresión regular aplicada a un componente de la ruta (nombre de archivo o carpeta).
Ejemplos:
regex:^README\\.md$ parent:/Users/demo
regex:Report.*2025
El interruptor de sensibilidad a mayúsculas de la UI afecta la coincidencia de regex.
content: escanea el contenido de los archivos buscando una subcadena plana:
- No hay regex dentro de
content:— es una coincidencia de subcadena de bytes. - La sensibilidad a mayúsculas sigue el interruptor de la UI:
- En modo insensible a mayúsculas, el motor pasa a minúsculas tanto la aguja como los bytes escaneados.
- En modo sensible a mayúsculas, los bytes se comparan tal cual.
- Se permiten agujas muy pequeñas, pero
""(vacía) se rechaza.
Ejemplos:
*.md content:"Bearer "
ext:md content:"API key"
in:/Users/demo/Projects content:deadline
type:doc content:"Q4 budget"
La coincidencia de contenido se hace en modo streaming sobre el archivo; las secuencias multibyte pueden atravesar los límites del buffer.
Filtra por etiquetas de Finder (macOS). Cardinal obtiene las etiquetas bajo demanda desde los metadatos del archivo (sin caché) y, para conjuntos grandes de resultados, usa mdfind para reducir candidatos antes de aplicar la coincidencia de etiquetas.
- Acepta una o más etiquetas separadas por
;(OR lógico):tag:ProjectA;ProjectB. - Encadena varios filtros
tag:(AND lógico) para coincidencias con varias etiquetas:tag:Project tag:Important. - La sensibilidad a mayúsculas sigue el interruptor de la UI.
- Coincide los nombres de etiqueta por subcadena:
tag:projcoincide conProjectyproject.
Ejemplos:
tag:Important
t:Urgent
tag:ProjectA;ProjectB report
tag:Project tag:Archive report
in:/Users/demo/Documents tag:"Q4"
Algunas combinaciones realistas:
# Notas Markdown en Documents (sin PDFs)
parent:/Users/demo/Documents ext:md
parent:/Users/demo/Documents !ext:pdf
# PDFs en Reports que mencionan “briefing”
ext:pdf briefing parent:/Users/demo/Reports
# Fotos de vacaciones
type:picture vacation
ext:png;jpg travel|vacation
# Archivos de log recientes dentro de un árbol de proyecto
in:/Users/demo/Projects ext:log dm:pastweek
# Scripts de shell directamente bajo la carpeta Scripts
parent:/Users/demo/Scripts *.sh
# Todo con “Application Support” en la ruta
"Application Support"
# Coincidir un nombre de archivo específico vía regex
regex:^README\\.md$ parent:/Users/demo
# Excluir PSD en cualquier lugar bajo /Users
in:/Users demo!.psd
Usa esta página como la lista autorizada de operadores y filtros que el motor implementa hoy; las funciones adicionales de Everything (como fechas de acceso/ejecución o filtros basados en atributos) se analizan a nivel de sintaxis pero actualmente se rechazan durante la evaluación.