【问题标题】:How can I concatenate one file into a list of files which are inside different directories?如何将一个文件连接到不同目录中的文件列表中?
【发布时间】:2015-02-26 00:11:09
【问题描述】:

我正在使用 bash,我试图将一个文本文件放在不同目录中每个文件的末尾,我有类似的东西

BaseFile
/Dir1/File1
/Dir2/File2
/DirN/FileN

我想将 BaseFile 的文本放在每个 File1、File2、...、FileN 的末尾,覆盖它们。我试过 find、cat 和 grep,但无法得到我想要的结果。提前致谢!

【问题讨论】:

  • 您想将内容附加到这些文件中覆盖它们的内容吗?
  • 追加但保存在同一个文件中,而不是创建一个新的

标签: bash find cat


【解决方案1】:

你也可以使用循环:
for x in /Dir*/FILE* ; do cat BaseFile >> "$x" ; done

【讨论】:

    【解决方案2】:

    这可能不是最优雅的,但会将 BaseFile 的内容附加到名称以 'File' 开头的任何文件中:

    找到。 -type f -name "File*" -exec cat BaseFile >> "{}" \;

    编辑:

    正如 gniourf_gniourf 指出的那样,我完全错了。他们在下面的评论是我的目标,但失败了

    find . -type f -name "File*" -exec sh -c 'cat BaseFile >> "$0"' "{}" \;
    

    【讨论】:

    • 不!这不行!重定向>> 不会按照您的想法进行!也许你的意思是:find . -type f -name "File*" -exec sh -c 'cat BaseFile >> "$0"' "{}" \;。您的命令将愉快地创建一个名为 {} 的文件,该文件将包含与找到的文件 :) 一样多的文件 BaseFile 的副本。
    • 记住,重定向可以写在任何地方(只有它们的相对位置很重要)。因此,您的命令将具有与 find . -type f -name "File*" -exec cat BaseFile \; >> "{}" 等相同的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多