Pipe

將 pv 與 md5sum 一起使用

  • June 28, 2020

我用來檢查同一目錄md5sumpv的 4 GiB 文件:

md5sum dir/* | pv -s 4g | sort

該命令在大約 28 秒內成功完成,但pv輸出全錯。這是始終顯示的那種輸出:

219 B 0:00:07 [ 125 B/s ] [>                                ]  0% ETA 1668:01:09:02

沒有-s 4gand也是這樣| sort。我也嘗試過使用不同的文件。

我試過使用pvwithcat並且輸出很好,所以問題似乎是由md5sum.

pv實用程序是“花哨的cat”,這意味著您可以pv在大多數情況下使用cat.

使用catwith md5sum,您可以計算單個文件的 MD5 校驗和

cat file | md5sum

或者,與pv

pv file | md5sum

不幸的是,這不允許md5sum將文件名正確插入到其輸出中。

現在,幸運的pv是,它真的很花哨cat,並且在某些系統(Linux)上,它能夠觀察正在通過另一個程序的數據。這是通過將其-d選項與該其他程序的程序 ID 一起使用來完成的。

這意味著您可以執行以下操作

md5sum dir/* | sort >sums &
sleep 1
pv -d "$(pgrep -n md5sum)"

這將允許pv觀看該md5sum過程。sleep允許md5sum在後台執行的 正確啟動 。pgrep -n md5sum將返回您擁有的最近啟動的md5sum程序的 PID。pv將在它正在監視的程序終止後立即退出。

我已經測試了這種特殊的執行方式pv幾次,它似乎通常執行良好,但有時它似乎停止輸出任何東西作為md5sum切換到下一個文件。有時,它似乎會在 shell 中生成虛假的後台任務。

執行它可能是最安全的

md5sum dir/* >sums &
sleep 1
pv -W -d "$!"
sort -o sums sums

-W選項將導致pv等待直到有實際數據正在傳輸,儘管這似乎並不總是可靠地工作。

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