Files

使用 mdfind 查找給定文件名的文件

  • October 20, 2019

有沒有辦法要求mdfind搜尋具有確切文件名的文件名?

在管道中的某個時刻,我有這個:

(filenames are produced here) | while read f; do mdfind -name "$f" | grep -E "/$f";

我有兩個問題:

  • 如果文件名包含+

grep: repetition-operator operand invalid

  • 如果文件名包含括號,則結果為空。

我怎樣才能解決這個問題 ?

我認為您在這裡不需要任何正則表達式。只需嘗試使用 grep 搜尋固定字元串。-F您可以使用開關啟用固定字元串匹配。

鑑於您的命令行看起來像

(filenames are produced here) | \
while read f ; \
   do mdfind -name "$f" | grep -F "/$f" ; \
done

使用手冊頁的力量。;)

mdfind 的手冊頁說:

-literal    Force the provided query string to be taken as a literal query string, without interpretation.

如果沒有該選項,mdfind 會將“*”、“+”和“()”等字元解釋為正則表達式。

文件名的元數據屬性是kMDItemFSName. 因此,要查找具有特定名稱的文件:

mdfind -literal 'kMDItemFSName = "somefile.txt"'

額外提示:您還可以mdls /path/to/somefile.txt用來檢查文件的元數據

引用自:https://unix.stackexchange.com/questions/62150