![如何将命令的输出重定向到已存在的文件而不删除其内容?](https://linux22.com/image/75451/%E5%A6%82%E4%BD%95%E5%B0%86%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%B7%B2%E5%AD%98%E5%9C%A8%E7%9A%84%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E5%88%A0%E9%99%A4%E5%85%B6%E5%86%85%E5%AE%B9%EF%BC%9F%20.png)
我正在备份一些文件并创建一个校验和文件,checksums.txt
以便稍后检查数据的完整性。然而,将每个校验和手动粘贴到文件中很不方便,因为我的备份由数百个文件组成,因此四处询问后,我得到了通过将输出重定向到校验和文件来简化过程的建议:
$ md5sum file > checksums.txt
或者
$ sha512sum file > checksums.txt
然而这样做取代文件的内容checksums.txt
以及本例中文件的校验和file
;相反,我想附加file
to的校验checksums.txt
和而不删除其内容。所以我的问题是:我该怎么做呢?
还有一件事。由于我是一个基本用户,请尝试(仅在可能的情况下)提出易于遵循的建议。
答案1
如果您想附加到文件,则必须使用>>
.
所以你的例子是
$ md5sum file >> checksums.txt
和
$ sha512sum file >> checksums.txt
答案2
操作符旁边>>
以附加模式打开文件正如@Thomas 的回答,另一个选项是使用运算符打开文件>
,但仅打开一次,并为两个命令保持打开状态:
exec 3> checksums.txt
将打开(并截断)文件描述符 3 上的文件,然后:
md5sum file1 >&3
将 file1 的 md5sum 写入其中。
md5sum file2 >&3
(当从同一 shell 运行时),将附加 file2 md5sum。
然后,你可以执行以下操作:
exec 3>&-
关闭该文件描述符。您还可以>
通过重定向整个stdout(文件描述符 1,运算符的默认值)来执行相同的操作 指挥组:
{ md5sum file1; md5sum file2; } > checksums.txt
或者使用子外壳代替指挥组:
(md5sum file1; md5sum file2) > checksums.txt