cpの速度とコピーされた割合を確認することはできますか?


251

nautilusを使用して大きなファイルをコピーすると問題が発生します(スタックします)。を使用してコピーする必要がありますcp。コピーされた%と転送速度を示すパラメータがあるかどうかを知りたいです。


39
rsync代わりに使用できますcp--progressオプションがあります。
frostschutz

2
Midnight Commanderまた、うまく機能し、プログレスバーを備えたきれいなテキストベースのUIを備えていますが、インストールされていない可能性があります。mcコマンドプロンプトで試してください。また、明らかにそうではありませんcp
CVn

3
rsyncwith を使用すると、--progress何が起こっているのかがわかりました。100%に達するとスタックし、最終的には数分続きます。私はノーチラスで起こっているのと同じだと思います。とにかくそれはすでに別の質問ですので、この質問の最良の答えはでrsync --progress、サイズ、%、速度、経過時間を示します。
yzT

2
rsyncの1つの問題は、純粋なコピーよりも実行速度が遅いことです。私の大きなサーバーでは、違いはそれぞれ60MB / sと300MB / sです。
pdwalker 14年

1
@pdwalker -Wオプションもありますか?私のすべてのホストでrsyncはほぼ同じくらい速いcp...だから私はrsync代わりに定期的に使用しますcp
スカペレン

回答:


193

rsyncprogress2全体的な割合を示すというフラグがあります:

rsync --info=progress2 source dest

5
--info = progress2はまだデフォルトのリポジトリに入れられておらず、ここでは2015年です。良いアイデアのようです。
ロニービズ

1
--info=progress2最終的に含まれていversion 3.1.0 protocol version 31ます。たぶん、あなたはあなたの答えを編集することができます、yzT。
ソパラホデアリエレス

1
--info=progress2rsyncが非常に高速であることに気付きました!200 MB /秒、Windowsは90 MB /秒を超えません!
-ReneFroger

1
@ReneFrogerはそれが実際の速度かもしれませんが(デバイスに依存します)、多くの場合、Linuxではその速い速度は本当に間違っており、コピーが完了した後、システムはデバイスを排出できるWindowsとは異なり、まだデバイスに書き込みますほぼすぐに。大きなファイルをコピーすると、その高速で起動する方法に気付くことができますが、標準のファイルまではダウンします。
yzT

7
それはちょうど私で働いた--progress。rsyncバージョン3.0.9
adrianTNT

103

他のツールを許可した場合、cpそれは確実に可能です。単一のファイルには、を使用できますpv。それは素晴らしい統計を提供する小さなツールです。

pv inputfile > outputfile

複数のファイルまたはディレクトリがある場合は、tarを使用できます。

tar c sourceDirectory | pv | tar x -C destinationDirectory

シェル関数でラップできます。入力するのは少なく、セマンティクスはに近いものになりcpます。これは非常にシンプルな(そしてエラー防止ではありません!)関数です:

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

の一部のバージョンはtar上記の構文(Solarisなどtar)をサポートしていないため、次のバリアントを使用する必要があることに注意してください。

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

このように呼ぶ

cpstat sourceDirectory destinationDirectory

これをさらに拡張してpv、残り時間の推定値を提供できます。

別の解決策(コメントで言及されているfrostschutzとして)は、--progressオプションでrsyncを使用することです:

rsync --progress -a sourceDirectory destinationDirectory

1
cpstatはpastebinに入れます=)
マット

7
これにより、転送速度は得られますが、ETAは得られpvません。パイプを通過するデータ量がわからないためです。これはを使用して指定できます-s。たとえば、最初にdu -sh sourceDirectory(大まかな)アイデアを取得し、次にに渡しpvますpv -s 100m
1月ファブリー

1
--info = progress2は、ディレクトリレベルの進行状況の統計情報を提供します。
AlexLordThorsen 14

vbuf(debian、ubuntu)はpv、おそらく仮想リングバッファーのせいで
。Skaperen15年

@Skaperen知らないvbuf。しかし、現時点ではDebianが不安定であると思われるため、通常はDebian安定版を実行しているサーバーでは利用できないことがよくあります。
マルコ

58

rsync コピーの進行中に進行状況を表示するのに最適です。

例:

rsync -avh --progress sourceDirectory destinationDirectory

27

他の回答で説明したように、cpはその機能を提供しません。ただし、プログレス(以前はcvと呼ばれていました)は、この欠落した機能を提供するのに非常に役立つ小さなツールです。

このツールは、ご使用のシステムで現在実行中のcoreutils基本コマンド(cp、mv、dd、tar、gzip / gunzip、cat、...)を検索し、コピーされた割合を表示するTiny Dirty Linux Only * Cコマンドとして説明できますデータ。

私は過去数ヶ月間それを使用してきましたが、しっかりしています。


すべてのファイルシステム(cifsなど)で動作するようには見えませんが、+ 1、そのようなクレイジーなting exitを知りませんでした
akostadinov

1
このプロジェクトは現在「progress-Coreutils Progress Viewer(以前のcv)」と呼ばれることに注意してください。
chappjc

17

cpの速度とコピーされた割合を確認することはできますか?

はい、cp端末でコマンドの進行状況を表示できます。


方法#1:(使用progress

新しいターミナルを開いて入力progressすると、cpコマンドの進行状況や次のような他のコマンドが表示されます。

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

インストールしていない場合はprogress、リポジトリからインストールできます。たとえば、CentOS次のコマンドを使用しますyum -y install progress

cpバックグラウンドでコマンドを実行した後、またはcp通常の実行後に別のターミナルを開くので、次のコマンドを試してください。

# progress -m

出力を参照してください:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

方法#2:(パッチを使用cp

または、GNU coreutilsをダウンロードしてパッチを適用します。

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

実行:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

2つのファイルcpをコピーし、mv以下に配置coreutils-8.21/src//usr/local/binます。

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

または、ルートとしてファイルマネージャーを使用してコピーします

に次の行を追加します~/.bashrc

alias cp='cp -gR'
alias mv='mv -g'

ログアウトとログイン

進行状況バーは、著者なしで、–gまたは–progress-bar著者が推奨するように表示できます

出力を参照してください:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

ソース:linuxhelp


1
これが真の源のように見えるcpパッチ:web.archive.org/web/20131115171331/http://beatex.org/web/...
Kaushalモディ

1
progressコマンドに関するヒントについては+
ピーター

これが唯一の本当の答えです
アレッシオ

14

この投稿はやや古いことに注意してください。しかし、私は目前の問題の解決策を作ったので、自分の解決策を投稿すると思いました。

シナリオ:コピーするディレクトリ構造が非常に大きいため、1つのターミナルウィンドウでコマンドcp -R sourcedir destdirを発行します。

別のターミナルウィンドウを開くか、プロセスをバックグラウンドにプッシュしてから、(Ctrl+Z,bg<CR>)進行状況インジケーターをゲットーの方法で作成しましょう。

最初に、コピーするディレクトリ構造の合計サイズを取得します。これを行うには:

du -sh /path/sourcedirectory/

結果をギガバイト(G)に変換し、変数sourcesizeで取得した結果をnに置き換えます。sourcesizeとdestdir(宛先ディレクトリ)を挿入したら、以下のコマンドを実行します。

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

これにより、次のようなメッセージとともに10秒ごとに進行状況が出力されます。

0.100% completed
0.200% completed
0.300% completed 
... etc

このソリューションはコピーの速度に対応していなかったが、上記のコマンドを展開することで追加でき、おそらく読みやすくするためにbashスクリプトにすることもできます。たとえば、prにコピーされるデータ量を確認します。n時間単位の場合、速度は計算および表示するのに簡単なはずです。


これは実際に私のユースケースに最適なので、投稿してくれてありがとう!1つのファイルだけでなく、数千のファイルを含む巨大なディレクトリのコピーの進行状況を知りたいので、他の解決策は本当に役に立ちません。
イブラヒム

これは、特に私が今経験しているような場合には特に素晴らしいことです。事前に影響を考慮することなく、テラバイト単位のバックアップをあるストレージプールから別のストレージプールに移動する巨大なmv-jobをリモートで開始しました。これで、プロセスの背景を簡単に確認して、それを覗くことができます。驚くばかり!
ライリー

8

Marcoの答えを改善するために、今日、このバージョンのを書いたcpstatので、多くのディレクトリをコピーし、最後のパラメーターを宛先パスとして使用できます。ソースとして比較的深いパスを使用する場合、のおかげでtar、同じ依存ディレクトリツリーを自動的に作成できることに注意してください。

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}



5

たとえrsyncあなたが使用する必要があるプログレスバーをしたい場合は、あなたにいくつかの進捗状況の統計情報を提供しますpv

を使用cpvpvて、より簡単な構文のラッパーを使用できます。これは、cpディレクトリを再帰的にコピーするのに使用できるラッパーに似ています。

ここに画像の説明を入力してください

こちらで入手できます


のヒントについては+1 pv。素敵な発見!
ピーター

4

mc(真夜中の司令官)のようなツールを使用することは、他の答えの良い代替オプションです。

コピー/移動の進行状況を表示するシンプルなファイルマネージャーです。



4

別の簡単な解決策は、出力フォルダーを次のように監視することです。

Linux / Cygwin: watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

FreeBSD: gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>

この便利なユーティリティが実行duされ、違いが強調表示されます。

他の潜在的な解決策の1つduは、スループットの大まかな見積もりをループ、呼び出し、および吐き出す単純なスクリプトを作成することです。


3

このツールは、システム上で現在実行されているcoreutilsの基本的なコマンド(cp、mv、dd、tar、gzip / gunzip、catなど)を検索し、コピーされたデータの割合を表示するLinuxユーティリティコマンドです。

https://github.com/Xfennec/cv


1
これは、14年11月に@AmrMostafaによって既に提案されています。
ドゥブ

2

受信ファイルシステムのFUSEバグのために、cpが多少ブロックされた場合がありました。

cpから切り替えることができない場合(つまり--sparse = alwaysであるため)、実際に進行に対して信頼できるものが必要な場合は、/ procを使用します。

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0

0

VCP – cursesインターフェイスでファイルをコピーします(Linuxで進行状況バーを表示します)。

説明: vcpは、cursesインターフェースでファイルとディレクトリをコピーし、テキストのみの出力を使用できます。そのオプションと出力はBSDのcpに似ていますが、いくつかの新しい機能が追加されています。

以下に関する情報を提供します。

  • コピーされたファイルとコピーするために残されたファイル
  • 書き込まれたデータと合計データサイズ
  • 毎秒書き込まれるデータ
  • 2つのステータスバー、1つは現在のファイルステータス、もう1つは合計ステータス(1つのファイルを除き、両方とも現在を表示)、およびパーセンテージ

出力がコンソールに送信されるとき:

  • ステータスバー
  • コピーされたサイズと速度

VCP manページ:https : //linux.die.net/man/1/vcp

以下からvcp-2.2.tar.gzをダウンロードします。

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

依存関係:curses.h(libncurses-dev)。

Ubuntuで、インストールします:

sudo apt-get install libncurses-dev

または

sudo apt-get install libncurses5-dev

vcpのインストール:

make && make install

マニュアル:

man vcp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.