如何按日期顺序连接给定目录中的所有文件,我希望最新的文件位于顶部?

如何按日期顺序连接给定目录中的所有文件,我希望最新的文件位于顶部?

最旧的文件在底部?

另外,如果我这样做,是否也可以删除每个 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 / )

相关内容