文件查詢語(yǔ)句規(guī)則

文件元數(shù)據(jù)查詢表達(dá)式語(yǔ)法

文件元數(shù)據(jù)查詢是使用作為謂詞字符串格式的子集的查詢語(yǔ)言構(gòu)建的。元數(shù)據(jù)搜索表達(dá)式語(yǔ)法允許應(yīng)用程序“動(dòng)態(tài)的”構(gòu)建搜索,允許高級(jí)用戶構(gòu)建他們自己的查詢。語(yǔ)法相對(duì)簡(jiǎn)單,包括比較、語(yǔ)言類(lèi)型以及時(shí)間和日期變量。通過(guò)NSPredicate類(lèi)構(gòu)建

比較語(yǔ)法

文件元數(shù)據(jù)查詢表達(dá)式語(yǔ)法是 shell 用戶熟悉的文件名通配的簡(jiǎn)化形式。查詢具有以下格式:

attribute == value

其中attribute是標(biāo)準(zhǔn)元數(shù)據(jù)屬性(請(qǐng)參閱“文件元數(shù)據(jù)屬性參考”)或?qū)胝咦远x的元數(shù)據(jù)屬性。

例如,要在 Spotlight 中查詢由“Steve”創(chuàng)作的所有文件,查詢將如下所示:

kMDItemAuthors ==[c] "史蒂夫"

表 3-1中列出了可用的比較運(yùn)算符。

操作員 描述
== 平等的
!= 不相等
< 小于(僅適用于數(shù)值和日期)
> 大于(僅適用于數(shù)值和日期)
<= 小于或等于(僅適用于數(shù)值和日期)
>= 大于或等于(僅適用于數(shù)值和日期)
InRange(attributeName,minValue,maxValue) 指定 attributeName 中 minValue 到 maxValue 范圍內(nèi)的數(shù)值

值字符串中的字符應(yīng)使用該``字符進(jìn)行轉(zhuǎn)義。

示例中的搜索值具有修飾符“ c”。這些修飾符指定了如何進(jìn)行比較。
表 3-2描述了可用的比較修飾符。

搜索修飾符應(yīng)緊跟在比較運(yùn)算符之后并用方括號(hào)括起來(lái)[…]

修飾符 描述
c 比較不區(qū)分大小寫(xiě)。
d 比較對(duì)變音符號(hào)不敏感。

表 3-3顯示了幾個(gè)使用比較修飾符的示例。

請(qǐng)求參數(shù) 結(jié)果
kMDItemTextContent == "Paris" 匹配“Paris”但不匹配“paris”。
kMDItemTextContent ==[c] "Paris" 匹配“巴黎”和“巴黎”。
kMDItemTextContent ==[c] "*Paris*" 匹配“Paris”、“paris”、“I love Paris”和“paris-france.jpg”。
kMDItemTextContent == "Frédéric" 匹配“Frédéric”但不匹配“Frederic”。
kMDItemTextContent ==[d] "Frédéric" 無(wú)論單詞大小寫(xiě)如何,都匹配“Frédéric”和“Frederic”。

使用通配符 (*?) 可以匹配字符串開(kāi)頭、字符串結(jié)尾或字符串內(nèi)任何位置的子字符串。表 3-4顯示了幾種常見(jiàn)用法。

*字符的多個(gè)字符相匹配,而?通配符匹配單個(gè)字符。

請(qǐng)求參數(shù) 結(jié)果
kMDItemTextContent == "paris*" 匹配以“paris”開(kāi)頭的屬性值。例如,匹配“paris”,但不匹配“comparison”。
kMDItemTextContent == "*paris" 匹配以“paris”結(jié)尾的屬性值。
kMDItemTextContent == "*paris*" 匹配值中任何位置包含“paris”的屬性。例如,匹配“paris”和“comparison”。
kMDItemTextContent == "paris" 匹配完全等于“paris”的屬性值。

可以使用AND( &&) 和OR( ||)的類(lèi) C 語(yǔ)法組合查詢。例如,要將查詢限制為由“Steve”創(chuàng)作的音頻文件,查詢將是:

kMDItemAuthors ==[c] "Steve" && kMDItemContentType == "public.audio"

括號(hào)可用于進(jìn)一步分組查詢匹配。例如,要搜索由“Steve”或“Daniel”創(chuàng)作的音頻文件,查詢將是:

(kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors[c] == "Steve") && kMDItemContentType == "public.audio"

您可以使用以下查詢擴(kuò)展此搜索以包括視頻文件:

(kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors ==[c] "Steve" ) && (kMDItemContentType == "public.audio" || kMDItemContentType == "public.video")

時(shí)間和日期變量

您還可以創(chuàng)建使用日期和時(shí)間作為搜索值的查詢。日期和時(shí)間值被格式化為與 CFDate 兼容的浮點(diǎn)值,秒相對(duì)于 2001 年 1 月 1 日。

此外,$time還提供了可用于指定相對(duì)于當(dāng)前時(shí)間的值的變量,如表 3-5所示。

時(shí)間變量 描述
$time.now 當(dāng)前日期和時(shí)間。
$time.today 當(dāng)前日期。
$time.yesterday 昨天的日期。
$time.this_week(-1) 前一周的日期。
$time.this_week 當(dāng)前周中的日期。
$time.this_month 當(dāng)前月份的日期。
$time.this_year 當(dāng)前年份中的日期。
$time.now(NUMBER) 通過(guò)向當(dāng)前時(shí)間添加正值或負(fù)值(以秒為單位)的日期和時(shí)間。
$time.today(NUMBER) 通過(guò)將正值或負(fù)值(以天為單位)添加到當(dāng)前日期的日期
$time.this_week(NUMBER) 通過(guò)將正值或負(fù)值(以周為單位)添加到當(dāng)前周來(lái)確定日期。
$time.this_month(NUMBER) 通過(guò)將正值或負(fù)值(以月為單位)添加到當(dāng)前月來(lái)確定日期。
$time.this_year(NUMBER) 通過(guò)將正值或負(fù)值(以年為單位)添加到當(dāng)前年份來(lái)確定日期。
$time.iso(ISO-8601-STR) 通過(guò)解析指定的 ISO-8601-STR 兼容字符串的日期。

使用該$time變量,您可以使用以下查詢限制搜索以僅查找上周已更改的文件:

((kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors[c] == "Steve") && (kMDItemContentType == "public.audio" || kMDItemContentType == "public.video")) && (kMDItemFSContentChangeDate == $time.this_week(-1))

注意: $time變量的值是在第一次執(zhí)行查詢時(shí)設(shè)置的。隨著查詢繼續(xù)運(yùn)行,它不會(huì)更新到當(dāng)前時(shí)間。

\

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容