找到:未知谓词

这可能不是一个Ubuntu的问题,而是一个Linux的问题,但我仍然希望有一些Linux用户能够帮助我理解这个问题。
我正在尝试使用find命令在一个目录树中查找一些文件。
不幸的是,其中一些文件以破折号开头,比如-000.jpg,-002.jpg,00n.jpg等等。 然而,每当命令找到一个以这种方式命名的文件时,它就会中断进程并以以下方式报错:
find: unknown predicate `-001.jpg'

或者以破折号开头的文件名,无论它叫什么。
在我看来,一些方式中的find命令将结果文件名解释为一个参数,但我还没有找到绕过这种行为的方法。
提前感谢您分享您的智慧。

这是奇怪的行为,可能是一个错误...但我想知道是否发生的情况是你在find命令中有一个带通配符的表达式,它被shell扩展成以-开头的文件名(在传递给find之前)。你能编辑你的问题,添加你正在发出的完整和准确的find命令的文本吗? - Eliah Kagan
你正在使用的确切命令行是什么? - Florian Diesch
1个回答

确保在提供给find的模式前加上引号,否则如果当前目录中存在匹配的文件,shell可能会对其进行扩展。

find /some/dir -name *.jpg   # bad
find /some/dir -name "*.jpg" # good

查看http://mywiki.wooledge.org/UsingFind

我刚刚执行了find ~/folder -name "*.png"命令,结果出现了标题中所述的错误。 - isomorphismes
@isomorphismes,这行代码本身不会产生那个错误消息。它必须由其他因素引起。例如,如果你尝试将find命令放入一个变量中,然后运行该变量,那就有可能出现这种类型的错误。如果是这种情况,解决办法很简单:不要将命令放入变量中。 - geirha
我在过去的两天里不小心重新启动了我的电脑,现在它可以工作了,所以我猜我不能再复现这个问题或进行测试了。我想不出会有什么改变,但并没有使用变量。我只是运行了裸露的代码。 - isomorphismes
2可能是因为我使用了 find /some/dir -name="*.jpg",而不是使用空格。希望对某些谷歌用户有所帮助。 - isomorphismes