我有一堆 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