【问题标题】:unix - cannot execute each result from find filesunix - 无法从查找文件执行每个结果
【发布时间】:2017-04-13 04:06:45
【问题描述】:
find . -type f -path '*/browser/components/*/*.react.js' -exec sed -i "" '1 i\
import { logRender } from "../../../common/lib/logger";
' {} +

上面的命令只执行一个文件,第一个而不是每个结果来自:

find . -type f -path '*/browser/components/*/*.react.js'

我错过了什么吗?

【问题讨论】:

  • 也许问题在于{} + 构造放置了find? 找到的文件列表?.. 考虑将其替换为{} ;。 (像往常一样,您可能需要转义 ;: {} \;。)

标签: shell unix sed command-line find


【解决方案1】:

你可以试试这个;

find . -type f -path '*/browser/components/*/*.react.js' -exec sed -i "" '1 i\
import { logRender } from "../../../common/lib/logger";
' {} \;

【讨论】:

    【解决方案2】:

    使用 SED 的 -s (--separate) 选项:

    -s, --separate

    将文件视为单独的而不是单个连续的长流。

    因为 find-exec command + 操作通过在末尾附加每个选定的文件名来构建命令。特别是,sed 命令将被多个文件调用:sed ... file1 file2 file3 ...

    否则,使用find -exec sed -i '...' {} ';' 按顺序处理文件。

    顺便说一句,您很可能正在使用 GNU SED,因为i\ 命令是 GNU 扩展。使用 GNU SED,您无需为 -i 选项指定参数。

    另外,请考虑通过 -e (--expression) 选项传递 SED 脚本以避免歧义。

    例子:

    find . -type f -path '*/browser/components/*/*.react.js' -exec sed -s -i -e '1 i\
    import { logRender } from "../../../common/lib/logger";
    ' {} +
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2014-04-17
      • 2023-02-07
      相关资源
      最近更新 更多