最舊的文件在底部?
另外,如果我這樣做,是否也可以刪除每個 HTML 檔案中包含的冗餘標頭?我看到自己將許多 HTML 文件連接起來,如果能稍微減小最終文件的文件大小,那就太好了。
答案1
連接您使用的文件
cat file1 file2 file3 ...
要取得按時間排序的引用檔案名稱列表,最新的在前,您可以使用
ls -t
綜合起來,
cat $(ls -t) > outputfile
您可能想為ls
(例如*.html
) 提供一些參數。
但如果檔案名稱中包含空格,則此方法將無法運作。My file.html
將假定為兩個檔名:My
和file.html
.您可以引用ls
檔名,然後使用xargs
理解引用的 來將參數傳遞給cat
。
ls -tQ | xargs cat
至於你的第二個問題,要過濾掉部分檔案並不困難,但這取決於你到底想刪除什麼。什麼是「冗餘標頭」?
答案2
按字典順序以外的順序列出檔案最簡單的方法是使用 zsh全域限定符。沒有 zsh,您可以使用ls
,但是解析 的輸出ls
充滿了危險。
cat *(om)
如果您想刪除某些行,請使用 sed 或 awk 或 perl。例如,<head>
要從第一個文件中取得 並組合<body>
其他文件中的部分,假設<body>
和</body>
標籤單獨位於每個文件中的一行上:
{
sed -e '/<\/body>/ q' *.html(om[2])
sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
echo '</body>'
echo '</html>'
} >concatenated.html
解釋:
- 首先,
concatenated.html
被創建。因此,它是最年輕的*.html
文件(假設沒有文件具有未來的日期。 - 然後從第二小的
*.html
檔案複製,但在行處退出</body>
。 - 然後從其他文件複製,但跳過所有內容到該
<body>
行並從該</body>
行開始。 - 最後產生最後一個結束標籤。
答案3
@angus 給出的解決方案很好,但如果資料夾中有目錄,則會出現問題,這將修復它。
cat $(ls -tpa | grep -v / )