查找具有特定文件名格式的文件,使用头文件对每个文件进行分类,并将每个此类文件的结果保存到原始文件

查找具有特定文件名格式的文件,使用头文件对每个文件进行分类,并将每个此类文件的结果保存到原始文件

我有一堆 html 文件,我想用一个头文件(至少有几行长度)来(单独)对它们进行分类,比如 header.txt。我快到了。我可以使用以下命令使用头文件来对每个文件进行cat,但是如何输出结果以将其保存在原始文件名下?

find . -iname "*.html" | xargs -L 1 cat header.txt 

上面打印出了我想要的内容,但是我如何引用参数xargs来添加最终的>原始文件名?

简而言之,我想将 header.txt 中的文本插入到每个 html 文件的开头。我可以修改上面的命令来执行此操作吗?或者还有其他方法可以实现这一目标吗?


作为更新,这是我自发布以来尝试过的方法,但没有成功:

find . -iname "*.html" | xargs -L 1 cat header.txt {} > {}.new

这很好,只是它打印到一个字面名为{}.new.该文件看起来应该是这样,但这没有帮助。

还尝试了@Dave的建议,但有一个我无法修复的语法错误:

 find . -iname "*.html" -exec (cat header.txt; cat {}) > {}.new
-bash: syntax error near unexpected token `('

答案1

我想将 header.txt 中的文本插入到每个 html 文件的开头。

要将 的内容添加header.txt到所有 HTML 文件之前,请使用以下 oneliner:

for i in `find . -name '*.html'` ; do cat /path/to/header.txt > "$i".tmp && cat "$i" >> "$i".tmp && mv "$i".tmp "$i" ; done

内容1.html

first html file contents

内容header.txt

my header

1.html运行脚本后的内容:

my header
first html file contents

(我已经测试过了,但请备份您的文件以防万一。)

答案2

您可以使用 while 循环,如下所示:

find . -iname "*.html" | while read line; do cat header.txt "$line" > "${line}.new" ; done

相关内容