【问题标题】:Search for text files in a directory and append a (static) line to each of them在目录中搜索文本文件并在每个文件后面附加一个(静态)行
【发布时间】:2014-07-29 19:39:53
【问题描述】:

我有一个目录,其中包含许多子目录和这些子目录中带有后缀的文件(例如 FileA-suffixA FileB-SuffixB FileC-SuffixC FileD-SuffixA 等)。

如何递归搜索具有特定后缀的文件,并将用户定义的文本行附加到这些文件?我觉得这是 grep 和 sed 的工作,但我不确定我将如何去做。我对脚本很陌生,所以请多多包涵。

【问题讨论】:

    标签: linux bash file-io sed grep


    【解决方案1】:

    你可以这样做

    find /where/to/search -type f -iname '*.SUFFIX' -exec echo "USER DEFINED STRING" >> \{\} \;
    
    1. find 在提供的路径中搜索
    2. -type f 仅查找文件
    3. -iname '*.SUFFIX' 查找 .SUFFIXed 名称,忽略大小写

    【讨论】:

    • 我试图了解它是如何工作的。 -type f 有什么作用?
    • 这是否通过子目录自动递归?还是我需要一个 -r 或类似的参数?
    【解决方案2】:
    find ./ -name "*suffix" -exec bash -c 'echo "line_to_add" >> $1' -- {} \;
    

    基本上,您使用 find 来获取文件列表。然后你使用 bash 将你的行附加到该列表中。

    【讨论】:

    • 什么是“$1' -- {} \;”做什么?
    • 我通过将一些样本和我拥有的一些知识拼凑在一起来完成这项工作,所以我不能 100% 确定。但是,$1 是第一组数据(在本例中是文件列表)。 -- 就是说bash没有更多的选项了(比如-c、-X)。我不知道 {} \; 是什么正在这里完成。没有它们也可以工作。
    • 我会在实际的 Bash 或 Perl 中完成此操作。不过这是我个人的看法。
    猜你喜欢
    • 2016-06-25
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多