使用 cat
如果你只想将一组文件放到单个文件中,那么 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
这样的命令来查看合并文件之前文件的顺序。
注意:首先确保你的命令包含合并文件中所需的所有文件,而不是其他文件,尤其是你使用 *
等通配符时。不要忘记,用于合并的文件仍将单独存在,在确认合并后,你可能想要删除这些文件。
按时间期限合并文件
如果要基于每个文件的时间期限而不是文件名来合并文件,请使用以下命令:
-
$ for file in `ls -tr myfile.*`; do cat $file >> BigFile.$$; done
使用 -tr
选项(t
= 时间,r
= 反向)将产生按照最早的在最前排列的文件列表。例如,如果你要保留某些活动的日志,并且希望按活动执行的顺序添加内容,则这非常有用。
上面命令中的 $$
表示运行命令时的进程 ID。不是很必要使用此功能,但它几乎不可能会无意添加到现有的文件,而不是创建新文件。如果使用 $$
,那么生成的文件可能如下所示:
-
$ ls -l BigFile.*
-
-rw-rw-r-- 1 justme justme 931725 Aug 6 12:36 BigFile.582914
合并和排序文件
Linux 提供了一些有趣的方式来对合并之前或之后的文件内容进行排序。
按字母对内容进行排序
如果要对合并的文件内容进行排序,那么可以使用以下命令对整体内容进行排序:
-
$ cat myfile.1 myfile.2 myfile.3 | sort > newfile
如果要按文件对内容进行分组,请使用以下命令对每个文件进行排序,然后再将它添加到新文件中:
-
$ for file in `ls myfile.?`; do sort $file >> newfile; done