内容を削除せずにコマンド出力を既存のファイルにリダイレクトするにはどうすればよいですか? [コピー]

内容を削除せずにコマンド出力を既存のファイルにリダイレクトするにはどうすればよいですか? [コピー]

checksums.txt後でデータの整合性を確認するために、一部のファイルをバックアップしてチェックサムファイルを作成しています。ただし、バックアップは何百ものファイルで構成されているため、各チェックサムをファイルに手動で貼り付けるのは不便です。そこで、お問い合わせの後、出力をチェックサムファイルの提案にリダイレクトしてプロセスを簡素化するアイデアを得ました。

$ md5sum file > checksums.txt

または

$ sha512sum file > checksums.txt

しかし、これを行うと変えるファイルの内容checksums.txtとこの場合、ファイルのチェックサムをfile代わりに使用したいと思います。追加filechecksums.txt内容を削除せずにtoのチェックサムです。だから私の質問は次のようになりますどうすればいいですか?

そしてもう一つ。私はデフォルトのユーザーなので、(可能な場合のみ)フォローしやすい提案をしてください。

答え1

ファイルに追加するには>>

だからあなたの例は

$ md5sum file >> checksums.txt

そして

$ sha512sum file >> checksums.txt

答え2

演算子の横に>>追加モードでファイルを開きます。@Thomasが答えたように別のオプションは、演算子を使用してファイルを>一度だけ開き、両方のコマンドに対して開いたままにすることです。

exec 3> checksums.txt

ファイル記述子3でファイルを開いて切り取ります。それから:

md5sum file1 >&3

file1のmd5sumをここに書き込みます。

md5sum file2 >&3

(同じシェルで実行している場合)file2 md5sumが追加されます。

その後、次のことができます。

exec 3>&-

ファイル記述子を閉じます。>stdout全体(ファイル記述子1、演算子のデフォルト値)をリダイレクトして同じことを実行することもできます。コマンドグループ:

{ md5sum file1; md5sum file2; } > checksums.txt

または使用サブシェル変えるコマンドグループ:

(md5sum file1; md5sum file2) > checksums.txt

関連情報