Shell

如何將命令的輸出重定向到已經存在的文件而不刪除其內容?

  • October 19, 2015

我正在備份一些文件並正在創建一個校驗和文件checksums.txt,以便稍後檢查我的數據的完整性。但是,將每個校驗和手動粘貼到文件中很不方便,因為我的備份包含數百個文件,所以四處詢問我得到了通過將輸出重定向到校驗和文件來簡化過程的建議:

$ md5sum file > checksums.txt

或者

$ sha512sum file > checksums.txt

然而,這樣做會用文件的校驗和替換文件的內容,在這個例子中,文件;相反,我想在不刪除其內容的情況下附加to的校驗和。所以我的問題是:我該怎麼做?checksums.txt``file``file``checksums.txt

還有一件事。由於我是基本使用者,請嘗試(僅在可能的情況下)提出易於遵循的建議。

如果要附加到文件,則必須使用>>.

所以你的例子是

$ md5sum file >> checksums.txt

$ sha512sum file >> checksums.txt

除了由@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

或者使用subshel​​l而不是命令組

(md5sum file1; md5sum file2) > checksums.txt

引用自:https://unix.stackexchange.com/questions/237050