我有機會做一些實驗,以確定mdfind
是如何運作的,而不是如何記錄 - 兩者不同。
首先,讓我們來看看在我的Mac上掛着的名爲tardis.png
的文件的Spotlight數據。
mdls tardis.png
輸出
_kMDItemOwnerUserID = 501
kMDItemBitsPerSample = 32
kMDItemColorSpace = "RGB"
kMDItemContentCreationDate = 2017-05-31 14:15:03 +0000
kMDItemContentModificationDate = 2017-05-31 14:15:03 +0000
kMDItemContentType = "public.png"
kMDItemContentTypeTree = (
"public.png",
"public.item",
"public.png",
"public.data",
"public.image",
"public.content"
)
kMDItemCreator = "Adobe Photoshop CC 2017 (Macintosh)"
kMDItemDateAdded = 2017-05-31 14:15:23 +0000
kMDItemDisplayName = "tardis.png"
kMDItemFSContentChangeDate = 2017-05-31 14:15:23 +0000
kMDItemFSCreationDate = 2017-05-31 14:15:22 +0000
kMDItemFSCreatorCode = "8BIM"
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = (null)
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = (null)
kMDItemFSLabel = 0
kMDItemFSName = "tardis.png"
kMDItemFSNodeCount = (null)
kMDItemFSOwnerGroupID = 20
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 1488497
kMDItemFSTypeCode = "PNGf"
kMDItemHasAlphaChannel = 0
kMDItemKind = "Portable Network Graphics image"
kMDItemLogicalSize = 1488497
kMDItemOrientation = 1
kMDItemPhysicalSize = 1490944
kMDItemPixelCount = 2091600
kMDItemPixelHeight = 1494
kMDItemPixelWidth = 1400
kMDItemProfileName = "sRGB IEC61966-2.1"
kMDItemResolutionHeightDPI = 72
kMDItemResolutionWidthDPI = 72
這裏是匹配並列出一個查詢文件:
mdfind -onlyin . "(kMDItemPixelHeight>1500 || kMDItemPixelWidth=1400)&& kMDItemKind='*image*' && kMDItemProfileName='srgb*'c"
,顯示瞭如何做複合搜索與&&
(AND)和||
(OR),如何將括號內的條件分組(conditionA || conditionB)
以及如何進行不區分大小寫的搜索(通過在搜索字符串後追加c
)。
例子:
mdfind -0 kind:image | xargs -0 mdls -n kMDItemAcquisitionModel | sort -u
kMDItemAcquisitionModel = "645 PRO Mk III for iOS"
kMDItemAcquisitionModel = "BlackBerry 8900"
kMDItemAcquisitionModel = "BlackBerry 9000"
kMDItemAcquisitionModel = "Canon EOS 5D Mark III"
kMDItemAcquisitionModel = "Canon EOS 5D"
kMDItemAcquisitionModel = "Canon EOS 7D Mark II"
kMDItemAcquisitionModel = "Canon EOS 7D"
kMDItemAcquisitionModel = "Canon EOS-1D Mark II N"
kMDItemAcquisitionModel = "Canon EOS-1D Mark IV"
kMDItemAcquisitionModel = "Canon EOS-1D X"
kMDItemAcquisitionModel = "Canon EOS-1DS"
kMDItemAcquisitionModel = "Canon EOS-1Ds Mark II"
kMDItemAcquisitionModel = "Canon EOS-1Ds Mark III"
kMDItemAcquisitionModel = "EOS-1Ds Mark III"
kMDItemAcquisitionModel = "EPSON Perfection 4990"
kMDItemAcquisitionModel = "NIKON D800"
kMDItemAcquisitionModel = "NIKON D800E"
kMDItemAcquisitionModel = "Perfection 4990"
kMDItemAcquisitionModel = "Perfection4990"
kMDItemAcquisitionModel = "PerfectionV700 "
kMDItemAcquisitionModel = "PerfectionV700"
kMDItemAcquisitionModel = "TANGO "
kMDItemAcquisitionModel = "TANGO"
kMDItemAcquisitionModel = "iPad mini 4"
kMDItemAcquisitionModel = "iPad mini"
kMDItemAcquisitionModel = "iPad"
kMDItemAcquisitionModel = "iPhone 3G"
kMDItemAcquisitionModel = "iPhone 3GS"
kMDItemAcquisitionModel = "iPhone 4"
kMDItemAcquisitionModel = "iPhone 4S"
kMDItemAcquisitionModel = "iPhone 5"
kMDItemAcquisitionModel = "iPhone 5s"
kMDItemAcquisitionModel = "iPhone 6"
kMDItemAcquisitionModel = "iPhone 6s"
kMDItemAcquisitionModel = "iPhone SE"
kMDItemAcquisitionModel = "iPhone"
找到所有的照片:也許更多我自己參考;-)
名單,我用來做我的Mac上的圖片全部相機和掃描儀在iPhone 6上拍攝:
mdfind "kMDItemAcquisitionModel='*iPhone*6*'"
注意:
該名男子頁說:-onlyin
限制搜索到指定目錄的範圍。這是不正確的,因爲它也遞歸到包含的目錄中。
無論您使用單個(=
)還是雙倍(==
)等於比較符號,似乎都沒有區別。
該文檔說,您可以使用string==[c]"pattern"
進行不區分大小寫的搜索,這是不正確的,並且上面顯示的語法在macOS Sierra至少可以使用。
由於颶風,我已經離線了幾天。我找到了一個可行的答案,但沒有使用「kind:image」 mdfind -onlyin〜「(kMDItemContentTypeTree =='* image')&&(kMDItemCountry =='* Georgia *')」 – user1625344