在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
file1
和file2
是两个不同的文件,它们被追加到第三个结果文件( 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
的内容附加到file2
, file3
和file4
。
从手册页:
-a, --append append to the given FILEs, do not overwrite