【问题标题】:sed over multiple files in multiple directoriessed 处理多个目录中的多个文件
【发布时间】:2012-12-08 00:42:46
【问题描述】:

我有以下目录树:

books>book(i)>cluster.pir

其中 book(i) 是一组从 1 到 1023 的子目录,每个子目录都包含一个名为 cluster.pir 的文件夹。

以下 sed 命令:

sed -i '/>/d' ./*.pir

将为带有 .pir 分机的任何文件删除文件中包含“>”的任何行,这很好,但我的各种 .pir 文件位于它们自己的 book(i) 目录中。如何让命令跨越所有目录?我试过了:

find ./*.pir -type f -exec sed -i '/>/d' ./*.pir

在“书”父目录中开始时,但我得到:

find: missing argument to `-exec'

有人对此有什么想法吗?

谢谢。

【问题讨论】:

    标签: sed


    【解决方案1】:

    查找的格式为:

    find -exec command {} \;
    

    其中 {} 替换为文件名。

    编辑:在您的情况下,这将变为:

    find ./*.pir -type f -exec sed -i '/>/d' {} \;
    

    这将对每个文件调用 sed。

    【讨论】:

    • 非常感谢 - 尽管我必须执行以下操作:find -name ".pir" -type f -exec sed -i '/>/d' {} \ ;因为由于某种原因它找不到 ./pir...
    【解决方案2】:

    您可以添加通配符以跨越所有目录:

    sed -i '/>/d' ./book*/*.pir
    

    【讨论】:

      【解决方案3】:

      我在我的 Mac 上使用带有 sed 的文件通配符时遇到了问题,这种方法效果很好:

      FILE_PATH="/some/path/"
      sed -i '' "s|search|replace|g"  $(find ${FILE_PATH} -name '*.ext')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多