在Linux中追加一个文件到另一个文件

我有两个文件,file1和file2。 如何将file2的内容附加到file1,而不覆盖当前的file1。 我如何在Ubuntu Linux上执行此操作?

你是这个意思吗?

cat file2 >> file1 

cat file2 >> file1

>>操作符将输出附加到指定的文件或创build指定的文件,如果它不存在。

cat file1 file2 > file3

这将两个或多个文件连接到一个。 您可以拥有尽可能多的源文件。 例如,

cat *.txt >> newfile.txt

更新20130902
在评论eumirobuild议“不要尝试cat file1 file2 > file1 。 这可能不会导致预期结果的原因是在执行>左边的命令之前准备好接收redirect的文件。 在这种情况下,首先将file1截断为零长度并打开输出,然后cat命令尝试将现在为零的文件加上file2的内容连接到file1 。 结果是file1的原始内容丢失了,原来它是file2一个副本,这可能不是我们所期望的。

更新20160919
在意见tparteebuild议链接到支持信息/来源。 对于一个权威的参考,我指导那种读者到linuxcommand.org上的sh man页面 ,其中指出:

在执行命令之前,可以使用shell解释的特殊符号redirect它的input和输出。

虽然这确实告诉读者他们需要知道,如果你不是在寻找它并逐字parsing声明,很容易就会错过。 这里最重要的词是“之前”。 命令执行redirect完成(或失败)。

cat file1 file2 > file1的示例情况下,shell首先执行redirect,以便在执行命令之前将执行I / O句柄。

可以在Ian Allen的网站上以Linux课件的formsfind一个更加友好的redirect优先级的版本。 他的I / Oredirect注释页在这个话题上有很多话要说,包括即使没有命令也可以redirect的观察。 传递给shell:

 $ >out 

…创build一个名为out的空文件。 shell首先设置I / Oredirect,然后查找命令,找不到任何内容,然后完成操作。

注意 :如果您需要使用sudo ,请执行以下操作:

sudo bash -c 'cat file2 >> file1'

sudo简单地添加到命令中的常用方法将失败,因为权限升级不会转移到输出redirect。

试试这个命令:

 cat file2 >> file1 

你寻求的命令是

 cat file2 >> file1 
 cat file1 file2 > file3 

file1file2是两个不同的文件,它们被追加到第三个结果文件( file3 )。

仅供参考,如果使用ddrescue提供了一个可中断的方法来完成任务,例如,如果您有大文件并需要暂停,然后稍后再继续:

 ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile 

logfile是重要的一点。 您可以使用Ctrl-C中断进程并通过再次指定完全相同的命令来恢复进程,ddrescue将读取logfile并从中断处继续。 -o A标志告诉ddrescue从输出文件( file1 )中的字节A开始。 所以wc --bytes file1 | awk '{ print $1 }' wc --bytes file1 | awk '{ print $1 }'只是以字节为单位提取file1的大小(如果你喜欢,你可以粘贴ls的输出)。

cat可以是简单的解决scheme,但是当我们连接大文件时变得非常慢, find -print就是要解救你,尽pipe你必须使用一次猫。

 amey@xps ~/work/python/tmp $ ls -lhtr total 969M -rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt -rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt real 0m3.084s user 0m0.012s sys 0m2.308s amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1 real 0m2.516s user 0m0.028s sys 0m2.204s 

另一个scheme

 cat file1 | tee -a file2 

tee的好处是可以追加到尽可能多的文件,例如:

 cat file1 | tee -a file2 file3 file3 

file1的内容附加到file2file3file4

从手册页:

 -a, --append append to the given FILEs, do not overwrite