Pipe
將 pv 與 md5sum 一起使用
我用來檢查同一目錄
md5sum
中pv
的 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 4g
and也是這樣| sort
。我也嘗試過使用不同的文件。我試過使用
pv
withcat
並且輸出很好,所以問題似乎是由md5sum
.
該
pv
實用程序是“花哨的cat
”,這意味著您可以pv
在大多數情況下使用cat
.使用
cat
withmd5sum
,您可以計算單個文件的 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
等待直到有實際數據正在傳輸,儘管這似乎並不總是可靠地工作。