Nautilusを使用して大きなファイルをコピーするときに問題が発生します(スタックします)。 cp
を使用してコピーする必要があります。コピー率と転送速度を示すパラメータがあるかどうかを知りたいのですが。
rsync
には、全体の割合を示すprogress2
というフラグがあります。
rsync --info=progress2 source dest
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
rsync
は、コピーの進行状況を表示するのに最適です。
例:
rsync -avh --progress sourceDirectory destinationDirectory
CP速度とコピー率を確認することは可能ですか?
はい、コマンドcp
の進行状況を端末に表示することができます。
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
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
coreutils-8.21/src/
の下にある2つのファイルcp
およびmv
を/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 %
他の回答で説明されているように、cpはその機能を提供していません。ただし、 progress(以前のcv) は、この欠けている機能を提供するのに非常に役立つ小さなツールです。
このツールは、現在システムで実行されているcoreutils基本コマンド(cp、mv、dd、tar、gzip/gunzip、catなど)を探し、コピーされたパーセンテージを表示するTiny Dirty Linux Only * Cコマンドとして説明できますデータ。
私は過去数ヶ月間それを使用していて、それはしっかりしています。
この投稿は少し古いことに注意してください。しかし、私は目の前の問題の解決策を作成したので、自分の解決策を投稿したいと思いました。
シナリオ:コピーするディレクトリ構造が非常に大きいため、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スクリプトにして読みやすくすることができます。たとえば、コピーされたデータの量をチェックすることによって。時間単位では、速度を計算して表示するのは簡単です。
マルコの答えを改善するために、今日、このバージョンの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 - )
;}
cp
の標準バージョンにはありません。
cp
が完了するのを待つ間、 cpとリストのバックグラウンド サイズを指定できます。
私は this Perl を使用して単一ファイルの増加を監視しますが、cp(または私が実行している他のこと)の外部で実行されます
別の簡単な解決策は、次のように watch 出力フォルダだけにすることです。
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
を呼び出し、スループットの大まかな見積もりを出力する単純なスクリプトを作成することです。
dd status=progress
GNU Coreutils 8.24+(Ubuntu 16.04)に追加されたオプション:
dd if=src of=dst status=progress
Stdoutは、次のように定期的に更新される行です。
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
rsync
はいくつかの進捗状況を提供しますが、進捗バーが必要な場合はpv
を使用する必要があります。
cpv
のラッパーであるpv
をより簡単な構文で使用できます。これは、ディレクトリを再帰的にコピーするために使用できるcp
の構文に似ています。
あなたはそれを得ることができます ここ
mc
(真夜中の司令官)のようなツールを使用することは、他の回答の代替手段として適しています。
コピー/移動の進行状況を表示するシンプルなファイルマネージャです。
このツールは、現在システムで実行されているcoreutils基本コマンド(cp、mv、dd、tar、gzip/gunzip、catなど)を探し、コピーされたデータの割合を表示するLinuxユーティリティコマンドです。
受信ファイルシステムの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
Rsyncを使用します。ただし、rsync --info=progress2 source dest
はエラーskipping directory source
を生成します。これを修正するには、-r
または-a
オプションなどを追加する必要があります。 -a
を追加し、最後に--stats
を追加して、Nice出力の概要を表示することをお勧めします。最後に、前にtime
を追加して、プロセス全体にかかった時間を確認します。
だから、代わりにこれをしてください:
time rsync -a --info=progress2 --stats source destination
このコマンドを使用して、高速のSSDドライブ内に42 GBのディレクトリを約2.5分で複製しました。信じられない!
これが出力です。この実行にかかった「実際の」時間は2.798秒でした。それは、実際にコピーを行った最初の実行でtime
を使用するのを忘れたためです。これは、ソースと宛先ですべてが同じである場合の出力の外観です。
$ time rsync -a --info=progress2 --stats mydir mydir_copy
0 0% 0.00kB/s 0:00:00 (xfr#0, to-chk=0/289187)
Number of files: 289,187 (reg: 266,595, dir: 22,580, link: 12)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 0
Total file size: 48,621,942,935 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 2,096,688
File list generation time: 0.017 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 11,036,784
Total bytes received: 24,420
sent 11,036,784 bytes received 24,420 bytes 4,424,481.60 bytes/sec
total size is 48,621,942,935 speedup is 4,395.72
real 0m2.798s
user 0m1.115s
sys 0m1.935s
更新:
48GBフォルダーのフルコピーを実行すると、次のようになります。 3分13.408秒かかりました!
$ time rsync -a --info=progress2 --stats mydir mydir_bak
48,621,942,066 99% 239.88MB/s 0:03:13 (xfr#266595, to-chk=0/289188)
Number of files: 289,188 (reg: 266,595, dir: 22,581, link: 12)
Number of created files: 289,188 (reg: 266,595, dir: 22,581, link: 12)
Number of deleted files: 0
Number of regular files transferred: 266,595
Total file size: 48,621,942,935 bytes
Total transferred file size: 48,621,942,066 bytes
Literal data: 48,621,942,066 bytes
Matched data: 0 bytes
File list size: 12,515,323
File list generation time: 0.034 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 48,656,219,349
Total bytes received: 5,209,801
sent 48,656,219,349 bytes received 5,209,801 bytes 251,480,254.01 bytes/sec
total size is 48,621,942,935 speedup is 1.00
real 3m13.408s
user 2m40.937s
sys 1m0.627s
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
make && make install
man vcp