![使用 mdfind 查找给定确切文件名的文件](https://linux22.com/image/28095/%E4%BD%BF%E7%94%A8%20mdfind%20%E6%9F%A5%E6%89%BE%E7%BB%99%E5%AE%9A%E7%A1%AE%E5%88%87%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E6%96%87%E4%BB%B6.png)
有没有办法要求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