【问题标题】:The find Command with -exec Does Not Run the -exec Command带有 -exec 的 find 命令不运行 -exec 命令
【发布时间】:2014-06-19 00:43:48
【问题描述】:

我想写一个简单的命令来清理我的项目文件,所以我使用了:

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

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

使用 Ubuntu 12.04。

【问题讨论】:

    标签: linux ubuntu find exec rm


    【解决方案1】:

    尝试像这样使用它:

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

    当使用find 结合exec 的多个文件时,它通常只作用于最后一个文件名。

    【讨论】:

    • 你明白了!非常感谢。
    • 这里的措辞有点混乱。分组的需要与-exec 并没有太大关系,更多的是与优先级find 提供了它的选项。也就是说,在引入-or 之前,大多数选项具有相同的优先级,它们的存在率较低。所以find 会将原始语法视为(-type f AND -name "*.o") OR (-name "*.a") OR (-name "*.ko" AND -exec rm '{}' +)
    • 另外+\; 更好,因为rm 可以接受一系列文件名作为参数,所以find 不必为每个-exec 生成一个新的子shell并且会跑得更快。
    猜你喜欢
    • 2013-01-13
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多