如何将命令的输出重定向到已存在的文件而不删除其内容?

如何将命令的输出重定向到已存在的文件而不删除其内容?

我正在备份一些文件并创建一个校验和文件,checksums.txt以便稍后检查数据的完整性。然而,将每个校验和手动粘贴到文件中很不方便,因为我的备份由数百个文件组成,因此四处询问后,我得到了通过将输出重定向到校验和文件来简化过程的建议:

$ md5sum file > checksums.txt

或者

$ sha512sum file > checksums.txt

然而这样做取代文件的内容checksums.txt以及本例中文件的校验和file;相反,我想附加fileto的校验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

相关内容