Linux 带有-exec的find命令不运行-exec命令
我想编写一个简单的命令来清理项目文件,因此我使用了:Linux 带有-exec的find命令不运行-exec命令,linux,ubuntu,find,exec,rm,Linux,Ubuntu,Find,Exec,Rm,我想编写一个简单的命令来清理项目文件,因此我使用了: find . -type f -name "*.o" -o -name "*.a" -o -name "*.ko" -exec rm '{}' + 奇怪的是,它不起作用。当我删除“-exec rm'{}'+”时,我可以看到它将文件从终端中转储出来,所以看起来我的表达式是正确的。我甚至试着把“{}”+”改成“{}\;”,但这也没用。我还尝试用echo替换rm,但终端中没有显示任何内容。我做错什么了吗 使用Ubuntu 12.04。试着像这样使
find . -type f -name "*.o" -o -name "*.a" -o -name "*.ko" -exec rm '{}' +
奇怪的是,它不起作用。当我删除“-exec rm'{}'+”时,我可以看到它将文件从终端中转储出来,所以看起来我的表达式是正确的。我甚至试着把“{}”+”改成“{}\;”,但这也没用。我还尝试用echo替换rm,但终端中没有显示任何内容。我做错什么了吗
使用Ubuntu 12.04。试着像这样使用它:
find . -type f \( -name "*.o" -o -name "*.a" -o -name "*.ko" \) -exec rm -f {} \;
当将多个文件与
find
和exec
组合使用时,它通常只对最后一个文件名起作用。你得到了它!非常感谢。这里的措辞有点混乱。分组的需要实际上与-exec
没有多大关系,更多的是与优先级find
有关。也就是说,在引入-或之前,大多数选项具有相同的优先级,这些选项的存在性较低。因此,find
会将原始语法视为(-type f和-name“*.o”)或(-name“*.a”)或(-name“*.ko”和-exec rm'{}+)
,+
也比\
由于rm
可以将一系列文件名作为参数,因此find
不必为每个-exec
生成新的子shell,而且运行速度更快。