【问题标题】:execute a command on every file that has an specific extension对每个具有特定扩展名的文件执行命令
【发布时间】:2026-02-07 19:40:01
【问题描述】:

就像标题一样简单。我有嵌套文件,如果它们以 .toml 结尾,我想对它们执行命令。

尝试

find . -type f -exec sed -i '3i value = 1' {} \;

运行每个文件,但有没有办法只对以 .toml 结尾的文件执行它?

【问题讨论】:

    标签: bash loops nested find


    【解决方案1】:

    确实有;使用-name 开关:

    find . -name '*.toml' -type f -exec sed -i '3i value = 1' {} \;
    

    这匹配任何以.toml 结尾的文件。小心包含引号以防止 * 被 shell 扩展 - 您希望它按原样传递给 find

    顺便说一句,您可以改用-exec {} + 来加快脚本的执行速度:

    find . -name '*.toml' -type f -exec sed -i '3i value = 1' {} +
    

    这会将多个结果传递给sed 的同一个实例,而不是为每个结果生成一个单独的实例。

    【讨论】:

      【解决方案2】:
      find . -type f -name '*.toml' -exec sed -i '3i value = 1' {} \;
      

      【讨论】:

      • 没想到这么简单!
      最近更新 更多