如何按日期順序連接給定目錄中的所有文件,我希望最新的文件位於頂部?

如何按日期順序連接給定目錄中的所有文件,我希望最新的文件位於頂部?

最舊的文件在底部?

另外,如果我這樣做,是否也可以刪除每個 HTML 檔案中包含的冗餘標頭?我看到自己將許多 HTML 文件連接起來,如果能稍微減小最終文件的文件大小,那就太好了。

答案1

連接您使用的文件

cat file1 file2 file3 ...

要取得按時間排序的引用檔案名稱列表,最新的在前,您可以使用

ls -t

綜合起來,

cat $(ls -t) > outputfile

您可能想為ls(例如*.html) 提供一些參數。

但如果檔案名稱中包含空格,則此方法將無法運作。My file.html將假定為兩個檔名:Myfile.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 / )

相關內容