最旧的文件在底部?
另外,如果我这样做,是否也可以删除每个 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 / )