コマンドラインで「cp」を実行したときのボーレートを表示しますか? [コピー]

コマンドラインで「cp」を実行したときのボーレートを表示しますか? [コピー]

可能ですか?

答え1

標準のcoreutilscpコマンドはこの機能をサポートしていません。他のバージョンに追加するためのGentooパッチは作業中ですが、何らかの理由でCoreutils 6.10バージョンは含まれなくなりました。バグジラから、そして周辺に他の人もたくさんいると確信しています。

パッチが必要ない場合は、cp別のコマンドを使用する必要があります。たとえば、次の操作を実行できるフラグがrsyncあります。--progress

rsync --progress source destination

データをコピーしてstdoutをターゲット(たとえばcat source > destination)にリダイレクトするのではなく、パイプスループットを測定するプログラムを使用して中間(cat source | SOME-PROGRAM > destination)に挿入できます。この関連質問。私がお勧めする場所はPV(パイプラインビューア):

pvホームページのpvスクリーンショット

フラグを指定すると--rate転送速度が表示されます。

答え2

私はこのようにpvを使用することがこの目的に適していることがわかりました。

pv -p file1 > file2

スイッチには-pファイル転送の進行状況が表示されます。転送速度を確認するには、-rスイッチを追加してください。一定期間の平均転送速度を表示するには、この-aスイッチを使用できます。

pv -pra file1 > file2

答え3

私はこれが古いことを知っていますが...

実際に速度を表示したくなく、大容量ファイルをコピーしたときに何が起こるのかを確認したい場合は、次のwatchコマンドを使用します(これも機能しますmv)。

cp /path/to/myfile /path/to/target/myfile

その後、別のシェルからコピーコマンドをバックグラウンドにプッシュするか(Ctrl + Z後ろにbg)、次を使用して結果を確認できます。

watch "ls -sh1 /path/to/target"

これにより、更新コマンドの出力が継続的に更新されls(デフォルトでは2.0秒ごとに)、次のようになります。

Every 2.0s: ls -sh1 /path/to/target                                      
Tue Jan 12 15:02:45 2016

total 1.1G
4.0K data
130M tmp1.txt
137M tmp2.txt
151M tmp3.txt
168M tmp4.txt
162M myFile

答え4

duスループットを監視するスクリプトは次のとおりです。これはアプリケーションに拘束されず、https://unix.stackexchange.com/a/301490/183269。ターゲットホストでスクリプトを実行します。

monitorio () {
# show write speed for file or directory
    interval="10"
    target="$1"
    size=$(du -ks "$target" | awk '{print $1}')
    firstrun="1"
    echo ""
    while [ 1 ]; do
        prevsize=$size
        size=$(du -ks "$target" | awk '{print $1}')
        #size=$(ls -l "$1"  | awk '{print $5/1024}')
        kb=$((${size} - ${prevsize}))
        kbmin=$((${kb}* (60/${interval}) ))
        kbhour=$((${kbmin}*60))
        # exit if this is not first loop & file size has not changed
        if [ $firstrun -ne 1 ] && [ $kb -eq 0 ]; then break; fi
        echo -e "\e[1A $target changed ${kb}KB ${kbmin}KB/min ${kbhour}KB/hour size: ${size}KB"
        firstrun=0
        sleep $interval
    done
}

使用例:

user@host:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
user@host:~$ monitorio /tmp/zero
/tmp/zero changed 4KB 24KB/min 1440KB/hour size: 4164KB
/tmp/zero changed 9168KB 55008KB/min 3300480KB/hour size: 13332KB
/tmp/zero changed 9276KB 55656KB/min 3339360KB/hour size: 22608KB
/tmp/zero changed 8856KB 53136KB/min 3188160KB/hour size: 31464KB
^C
user@host:~$ killall dd; rm /tmp/zero

関連情報