Dav*_*vid 592
cat file2 >> file1
Run Code Online (Sandbox Code Playgroud)
T.R*_*Rob 289
cat file2 >> file1
该>>运营商将输出追加到指定的文件或创建命名的文件,如果它不存在.
cat file1 file2 > file3
这将两个或多个文件连接到一个文件.您可以根据需要拥有尽可能多的源文件.例如,
cat *.txt >> newfile.txt
更新20130902
在评论eumiro建议"不要尝试cat file1 file2 > file1." 这可能不会导致预期结果的原因是接收重定向的文件是在>执行左侧的命令之前准备的.在这种情况下,首先file1将其截断为零长度并打开输出,然后该cat命令尝试连接现在为零长度的文件加上file2into 的内容file1.结果是原始内容file1丢失了,取而代之的file2可能不是预期的副本.
更新20160919
在评论中,tpartee建议链接到支持信息/来源.对于权威的参考,我将善意的读者引导到linuxcommand.org 的sh手册页,其中指出:
在执行命令之前,可以使用shell解释的特殊表示法重定向其输入和输出.
虽然这确实告诉读者他们需要知道什么,如果你不是在寻找并逐字逐句地解析语句,那么很容易错过.这里最重要的词是'之前'.在执行命令之前,重定向已完成(或失败).
在示例中cat file1 file2 > file1,shell首先执行重定向,以便I/O句柄在执行命令之前执行的环境中就位.
可以在Ian Allen的网站上以Linux课件的形式找到一个更加友好的版本,其中重定向优先级可以详细介绍.他的I/O重定向注释页面对该主题有很多话要说,包括即使没有命令也可以进行重定向的观察.把它传递给shell:
$ >out
Run Code Online (Sandbox Code Playgroud)
...创建一个名为out的空文件.shell首先设置I/O重定向,然后查找命令,找不到,并完成操作.
jdu*_*unk 39
注意:如果您需要使用sudo,请执行以下操作:
sudo bash -c 'cat file2 >> file1'
简单地添加sudo到命令之前的常用方法将失败,因为权限提升不会延续到输出重定向中.
Zor*_*war 13
仅供参考,使用ddrescue提供了一种实现任务的可中断方式,例如,如果您有大文件,需要暂停,然后在稍后进行:
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
Run Code Online (Sandbox Code Playgroud)
这logfile是重要的一点.你可以Ctrl-C通过再次指定完全相同的命令来中断进程并恢复它,ddrescue将从logfile它停止的位置读取和恢复.该-o A标志告诉ddrescue从输出文件()中的字节A开始file1.所以wc --bytes file1 | awk '{ print $1 }'只提取file1字节大小(ls如果你愿意,可以直接粘贴输出).
正如评论中的ngks所指出的,缺点是默认情况下可能不会安装ddrescue,因此您必须手动安装它.另一个复杂因素是ddrescue有两个版本可能存在于您的存储库中:有关详细信息,请参阅此askubuntu问题.你想要的版本是GNU ddrescue,在基于Debian的系统上是名为的包gddrescue:
sudo apt install gddrescue
Run Code Online (Sandbox Code Playgroud)
对于其他发行版,请检查您的包管理系统以获取GNU版本的ddrescue.
另一个解决方案:
tee < file1 -a file2
Run Code Online (Sandbox Code Playgroud)
tee优点是您可以将一个文件附加到多个文件,例如:
tee < file1 -a file2 file3 file3
Run Code Online (Sandbox Code Playgroud)
会将 的内容附加file1到file2、file3和file4。
相比之下
cat file2 file3 file4 >> file1
Run Code Online (Sandbox Code Playgroud)
它将多个文件附加到一个文件上。
从手册页:
-a, --append
append to the given FILEs, do not overwrite
Run Code Online (Sandbox Code Playgroud)