Cat
查找具有特定文件名格式的文件,用標頭檔對每個文件進行分類,並將每個此類文件的結果保存到原始文件
我有一堆 html 文件,我想用一個標頭檔(至少幾行)將它們全部(單獨)分類,比如 header.txt。我快到了。我可以使用以下命令對帶有標頭檔的每個文件進行分類,但是如何輸出結果以將其保存在原始文件名下?
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 `('
我想將 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
(我已經測試過了,但請備份您的文件以防萬一。)
您可以使用 while 循環,如下所示:
find . -iname "*.html" | while read line; do cat header.txt "$line" > "${line}.new" ; done