Answers:
串联使用的文件
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
至于第二个问题,过滤掉文件的部分并不困难,但这取决于您要删除的内容。什么是“冗余标头”?
cat $(ls -t)
还容易扩展文件名。如果文件名带有*
,或?
或方括号表达式(例如file-[old].html
);并且被解释为模式的文件名是否与其他文件名匹配;该方法将产生不正确的列表。set -f
将解决这一缺陷。
ls -Q
可能产生不适合的输出xargs
。例如,"foo"
变为"\"foo\""
,但xargs不能理解双引号字符串中的转义双引号。
以字典顺序以外的其他顺序列出文件的最简单方法是使用zsh glob限定符。如果没有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>
行开始。
cat $(ls -t) > outputfile
,否则将cat
拒绝引用的文件名