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拒绝引用的文件名