如果你只想将一组文件放到单个文件中,那么 cat 命令是一个容易的选择。你所要做的就是输入 cat,然后按你希望它们在合并文件中的顺序在命令行中列出这些文件。将命令的输出重定向到要创建的文件。如果指定名称的文件已经存在,那么文件将被覆盖。例如:
$ cat firstfile secondfile thirdfile > newfile
如果要将一系列文件的内容添加到现有文件中,而不是覆盖它,只需将 > 变成 >>。
$ cat firstfile secondfile thirdfile >> updated_file
如果你要合并的文件遵循一些方便的命名约定,那么任务可能更简单。如果可以使用正则表达式指定所有文件名,那就不必列出所有文件。例如,如果文件全部以 file 结束,如上所示,你可以进行如下操作:
$ cat*file> allfiles
请注意,上面的命令将按字母数字顺序添加文件内容。在 Linux 上,一个名为 filea 的文件将排在名为 fileA 的文件的前面,但会在 file7 的后面。毕竟,当我们处理字母数字序列时,我们不仅需要考虑 ABCDE,还需要考虑 0123456789aAbBcCdDeE。你可以使用 ls *file 这样的命令来查看合并文件之前文件的顺序。
注意:首先确保你的命令包含合并文件中所需的所有文件,而不是其他文件,尤其是你使用 * 等通配符时。不要忘记,用于合并的文件仍将单独存在,在确认合并后,你可能想要删除这些文件。
按时间期限合并文件
如果要基于每个文件的时间期限而不是文件名来合并文件,请使用以下命令:
$ forfilein`ls -tr myfile.*`;docat $file >>BigFile.$$;done
使用 -tr 选项(t = 时间,r = 反向)将产生按照最早的在最前排列的文件列表。例如,如果你要保留某些活动的日志,并且希望按活动执行的顺序添加内容,则这非常有用。
上面命令中的 $$ 表示运行命令时的进程 ID。不是很必要使用此功能,但它几乎不可能会无意添加到现有的文件,而不是创建新文件。如果使用 $$,那么生成的文件可能如下所示:
$ ls-l BigFile.*
-rw-rw-r–1 justme justme 931725Aug612:36BigFile.582914
合并和排序文件
Linux 提供了一些有趣的方式来对合并之前或之后的文件内容进行排序。
按字母对内容进行排序
如果要对合并的文件内容进行排序,那么可以使用以下命令对整体内容进行排序:
$ cat myfile.1 myfile.2 myfile.3|sort> newfile
如果要按文件对内容进行分组,请使用以下命令对每个文件进行排序,然后再将它添加到新文件中:
$ forfilein`ls myfile.?`;dosort $file >> newfile;done