Cp

如何查看執行cp的進度?

  • November 13, 2021

是否可以檢查執行 cp 程序的進度?一些程序響應各種 KILL 信號,以便您可以檢查它們的狀態。我知道我可以使用參數 -v 執行 cp,但是如果忘記這樣做,cp 執行了很長時間,我想知道正在複製哪個文件,或者已經複製了多少文件。

是的,通過在目標文件和本地文件上執行 stat 並獲取文件大小,

IEstat -c "%s" /bin/ls

你通過比較這兩個值得到複製數據的百分比,就是這樣

在一個非常基本的實現中,如下所示:

function cpstat()
{
 local pid="${1:-$(pgrep -xn cp)}" src dst
 [[ "$pid" ]] || return
 while [[ -f "/proc/$pid/fd/3" ]]; do
   read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
   (( src )) || break
   printf 'cp %d%%\r' $((dst*100/src))
   sleep 1
 done
 echo
}

在最新版本的 Mac OS X 上,您只需點擊CTRL+T即可查看進度。來自cp(1) 的 OSX 10.6 手冊頁

"If cp receives a SIGINFO (see the status argument for stty(1)) signal,
the current input and output file and the percentage complete will be
written to the standard output."

點擊CTRL+T相當於在 BSD-ish 機器(包括 OSX)上使用 SIGINFO 向目前程序發出信號。

這也適用於dd(1)

我認為 Linux 沒有這種 SIGINFO 機制,並且在cp(1) 的 GNU 手冊頁中看不到任何關於可用於報告進度的信號的內容。

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