我有两个文件:file1和file2。如何将file2的内容追加到file1,使file1的内容持久化进程?
当前回答
Cat可以是简单的解决方案,但当我们连接大文件时变得非常缓慢,find -print可以拯救你,尽管你必须使用Cat一次。
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
其他回答
仅供参考,使用ddrescue提供了一种可中断的方式来完成任务,例如,如果你有大文件,需要暂停,然后在稍后的某个点继续执行:
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
日志文件是重要的位。您可以使用Ctrl-C中断该进程,并通过再次指定完全相同的命令来恢复它,ddrescue将读取日志文件并从它停止的地方恢复。-o A标志告诉ddrescue从输出文件(file1)中的字节A开始。所以wc——bytes file1 | awk '{print $1}'只是以字节为单位提取file1的大小(如果你喜欢,你可以直接从ls中粘贴输出)。
正如ngks在评论中指出的,缺点是ddrescue在默认情况下可能不会被安装,所以你必须手动安装它。另一个复杂的问题是,在你的存储库中可能有两个版本的ddrescue:查看这个askubuntu问题以获得更多信息。你想要的版本是GNU的ddrescue,在基于debian的系统上是名为gddrescue的包:
sudo apt install gddrescue
对于其他发行版,请检查您的包管理系统中GNU版本的ddrescue。
使用bash内置重定向(tldp):
cat file2 >> file1
Zsh特定:你也可以在没有cat的情况下做到这一点,尽管老实说cat更可读:
>> file1 < file2
>>将STDIN附加到file1, < dumps file2附加到STDIN。
Cat可以是简单的解决方案,但当我们连接大文件时变得非常缓慢,find -print可以拯救你,尽管你必须使用Cat一次。
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
注意:如果你需要使用sudo,请这样做:
Sudo bash -c 'cat file2 >> file1'
简单地将sudo放在命令前的通常方法将失败,因为特权升级不会延续到输出重定向中。
推荐文章
- 安装tzdata非交互式
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 如何在Python中获得所有直接子目录
- 确保一次只运行一个shell脚本实例的快速方法
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 如何在Ruby中创建文件
- Linux命令将域名转换为IP
- 如何从命令行在windows中找到mysql数据目录
- 在Bash命令提示符上添加git分支
- __FILE__宏显示完整路径
- 如何在Makefile中设置子进程的环境变量
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?