2015-05-16 33 views
4

在終端中,我使用mdfind 'kMDItemFSLabel = 6'在我的Mac上查找帶有紅色文件標籤的所有內容。但是,它似乎排除了帶有紅色標籤的文件夾。我試圖讓它也返回文件夾,但我似乎甚至沒有得到任何這些文件夾的查詢工作,更不用說將其添加到當前的文件結果。 mdfind kind:foldersmdfind 'kMDItemFSLabel=6'獨立工作,但我無法弄清楚如何讓兩個:除了文件,我如何讓mdfind包含文件夾匹配?

mdfind kind:folders AND 'kMDItemFSLabel == 6' 
mdfind 'kind:folders' AND 'kMDItemFSLabel == 6' 
mdfind 'kind:folders kMDItemFSLabel == 6' 
mdfind kind:folders kMDItemFSLabel == 6 
etc 

我得到的是Failed to create query for [query above]

什麼是正確的語法?

一旦我明白了,我怎麼說「文件夾和所有文件」? 「kind:folders + all」之類的東西?

編輯:也試過:

mdfind kind:folders && 'kMDItemFSLabel == 6' returns every folder on my computer 
mdfind kind:folders && kMDItemFSLabel == 6 returns every folder on my computer 
mdfind 'kind:folders' && 'kMDItemFSLabel == 6' returns every folder on my computer 
mdfind 'kind:folders && kMDItemFSLabel == 6' failed to create query 
+1

如果您在其中一個您希望匹配的文件夾上使用'mdls',它會顯示標籤嗎? –

+0

剛剛嘗試過,是的。 'kMDItemFSLabel = 6' – truth1ness

+1

Spotlight GUI是否能找到文件夾?如果是,請嘗試保存搜索,然後在文本編輯器中的「獲取信息」窗口或文件XML中檢查查詢。 –

回答

6

tl;博士

使用下,語言環境無關命令

  • 文件文件夾:
    • mdfind 'kMDItemUserTags == Red'
  • 文件
    • mdfind 'kMDItemUserTags == Red && ! kMDItemContentType == public.folder'
  • 文件夾只有
    • mdfind 'kMDItemUserTags == Red && kMDItemContentType == public.folder'

簡單,但區域設置特定的等效 - 這些僅在英語語言環境工作必須本地化與其他語言環境工作:

  • 文件文件夾:
    • mdfind 'tag:red'
  • files 只有
    • mdfind 'tag:red AND NOT kind:folder'
  • 文件夾只有
    • mdfind 'tag:red AND kind:folder'

的背景信息,請繼續閱讀。


更新:事實證明,焦點 - 因此mdfind - 說兩種不同的語言

  • SL - 簡單的語言:一個簡化的,局部的語言根據<attribName>:<attribVal
    • 基於僅包含一個子集中的所有的屬性(然而,可替代地,可以使用完整,語言環境無關的屬性名)
      • 簡化,本地化屬性名稱某些屬性也是本地化的;例如,屬性kindkMDItemKind)被明確指定爲報告本地化值基於簡化的匹配規則
    • 結合布爾運算符AND(默認),ORNOT(注意,這些做獲得本地化)。
  • FL - 靈活的語言:一個更加強大和語言環境無關,但更復雜以及基於區域設置獨立於基本的屬性名稱冗長的語言
    • 使用一系列關係運算符
    • 更靈活的值匹配選項
    • 與布爾運算符&&(默認),||結合,!

如果有人知道什麼正確調用這兩種語言,請讓我知道。

警告:這兩種語言不能混用 - 一個給定的查詢字符串必須使用一個或另一個語法。

以下解決方案相應地標記爲SLFL。 考慮到SL使用本地化名稱,儘管更復雜和冗長,但我建議使用SL解決方案來實現可預測的區域性獨立結果。


要查找所有文件文件夾標有紅色標籤,用途:

  • FL:

    mdfind 'kMDItemUserTags == Red' 
    
  • SL(英文):

    mdfind 'tag:red' # in German, `tag:red` would be `attribut:red` 
    

要找到文件(相對於文件夾)標記有紅色的文件/文件夾標籤,使用:

  • FL:

    mdfind 'kMDItemUserTags == Red && ! kMDItemContentType == public.folder' 
    
  • SL(英文):

    mdfind 'tag:red AND NOT kind:folder' # in German, `kind:folder` would be `art:ordner` 
    

要找到文件夾(相對於文件)標記有紅色的文件/文件夾標籤,使用:

  • FL:

    mdfind 'kMDItemUserTags == Red && kMDItemContentType == public.folder' 
    
  • SL(英文):

    mdfind 'tag:red AND kind:folder' 
    

一般使用訣竅mdfind

  • 傳遞查詢爲一體,單引號字符串,以保護它免受shell(如上所述)的解釋。
  • 如果您不知道如何制定一個查詢:
    • 通過Finder的搜索字段創建所需的查詢交互(開始輸入,並從彈出的列表中選擇查詢字段,或按+在頂部右上角用於通過彈出列表的幫助逐行創建多個AND組合條件)
    • 將其保存爲*.savedSearch文件(Save按鈕位於右上角,默認情況下保存爲~/Library/Saved Searches/),
    • 並打開該文件的Inspector窗口並看看Query:字段。
    • 請注意,此類系統創建的查詢始終使用FL語言。
  • 要查看所有支持元數據的屬性列表及其說明,從mdimport -A檢查輸出。
    • 第1列包含FL屬性名稱。
    • 列4包含SL屬性名稱(簡化,本地化)。
  • 要限制匹配到特定文件夾的子樹,請使用-onlyin <folder>選項。
  • 要在匹配路徑後輸出特定元數據屬性的值,請使用一個或多個-attr <attribName>選項。

文檔

注:該文檔極度缺乏,在零部件,不正確的。16的2015年5月

  • About File Metadata Queries
    • Query expression syntax - FL ONLY
      • 警告:cd選項爲需要追加到操作者[c]解釋和[d],而不是(ri ght-hand-side)操作數,這是OSX本身在保存交互式構造的查詢時所做的事情;另外,至少在其他選項出口,甚至沒有提到:w;如果你追加一個或多個選項字母來引用字符串,它們的含義如下:
      • c ...匹配不區分大小寫
      • d ...忽略變音符號(標記上方和下方的外國字符的基本字母)匹配時
      • w ...匹配整個單詞(從我所能知道的)
      • 您也可以使用熟悉的*(任何字符序列。)和?(一個字符)通配符。
    • List of common Metadata Attributes - FL ONLY
      • 注意,因爲聚光燈是可擴展的插件,任何給定的機器可具有另外的屬性;要查看文件類型到屬性的映射,請運行mdimport -X並查看Types密鑰的條目。

總而言之,作爲OSX 10.10.3,mdfind和聚光燈查詢語言都記錄不完整,挑剔的野獸 - 試錯常常是你最好的朋友,可悲的。

1

以下似乎工作:

mdfind 'kMDItemContentType = "public.folder" && kMDItemUserTags = "Red"cd' 

順便說一句,對"Red"年底cd意味着比賽應該忽略的情況下(與上更低)和變音標記(重音等)。

相關問題