使用 mdfind 查找给定确切文件名的文件

使用 mdfind 查找给定确切文件名的文件

有没有办法要求mdfind搜索具有确切文件名的文件名?

在管道中的某个时刻我有这个:

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

我有两个问题:

  • 如果文件名包含+

    grep: repetition-operator operand invalid

  • 如果文件名包含括号,则结果为空。

我怎样才能解决这个问题 ?

答案1

使用手册页的力量。 ;)

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检查文件的元数据

答案2

我认为你在这里不需要任何正则表达式。只需尝试使用 grep 搜索固定字符串即可。您可以使用开关启用固定字符串匹配-F

鉴于您的命令行看起来像

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

相关内容