2014-06-19 138 views
1

我想要写一个简单的命令来清理我的项目文件,所以我用:与-exec find命令不运行-exec命令

find . -type f -name "*.o" -o -name "*.a" -o -name "*.ko" -exec rm '{}' + 

奇怪的是它没有工作。当我删除“-exec rm'{}'+”时,我可以看到它将文件从终端中删除,所以看起来我的表情是正确的。我甚至尝试将“'{}'+”改为“'{}'\;”,但这也不起作用。我也尝试用echo替换rm,但终端中没有显示任何内容。难道我做错了什么?

使用Ubuntu 12.04。

回答

1

尝试使用这样的:

find . -type f \(-name "*.o" -o -name "*.a" -o -name "*.ko" \) -exec rm -f {} \; 

当使用find多个文件exec结合它往往只作用于最后一个文件名。

+0

你懂了!非常感谢。 – John

+0

这里的措辞有点混乱。对分组的需求与'-exec'没有多大关系,而更多的是优先'find'给出了它的选项。也就是说,大多数选项具有相同的优先级,直到引入“ - 或者”,它们的存在性较低。因此'find'会将原始语法当作'(-type f AND -name“* .o”)OR(-name“* .a”)OR(-name“* .ko”AND -exec rm'{} '+)' – BroSlow

+0

另外'+'比'\;'更好,因为'rm'可以将一系列文件名作为参数,所以'find'不必为每个'-exec'产生一个新的子shell,并且会跑得更快。 – BroSlow