回答:
一方でcp
、この機能を持っていない、あなたが使用することができpv
、これを行うには:
pv my_big_file > backup/my_big_file
注:このメソッドは、ファイルの許可と所有権を失います。この方法でコピーされたファイルは、自分で作成した場合と同じ権限を持ち、自分に属します。
この例では、pv
基本的には、ファイルをstdout *に出力します>
。このファイルは、演算子を使用してファイルにリダイレクトします。同時に、それを行うと、進行状況に関する情報を端末に出力します。
これは次のようになります。
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
システムに pv(またはtype sudo apt-get install pv
)をインストールする必要がある場合があります。
*:技術ビット
Unixライクなシステムには、3つの重要なデータストリームがあります。stdout(標準出力)、stderr(標準エラー)、stdin(標準入力)です。すべてのプログラムには、いわば3つすべてがあります。>
リダイレクト演算子には、ファイルへのプログラムの出力をリダイレクトします。上記のように、引数がないと>
、プログラムの標準出力がファイルにリダイレクトされます。cp
基本的には何も手の込んだ
cat source > destination
(cat
ファイルを読み取り、標準出力に出力するだけです)。pv
catに似ていますが、出力ストリームを別の場所にリダイレクトすると、代わりに進捗情報がstdoutに出力されます。
見てみましょうman pv
、それについての詳細を学ぶために。
この回答でDoRが示唆している別のオプションは、代わりにrsyncを使用することです。
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
これにより、進行状況を表示しながら、ファイルのアクセス許可/所有権が保持されます。
alias cp="rsync -avz"
cpは時代遅れです。
pv
、あなたはでスヌーピング行くことができる/proc/PID of cp/fd
と/proc/PID of cp/fdinfo
進捗状況を把握します。(速度を推測するのはあなた次第です。)私はこのテクニックを使って視聴していupdatedb
ます。
-z
おそらくネットワークコピーにのみ使用してください。ローカルコピーのデータの圧縮と解凍は、純粋なオーバーヘッドです。
rsync
末尾/
を追加しないように注意してください(または、bashの完了などで自動的に削除された場合は削除してください)。そうしないと、使用時cp
(またはgcp
)とは異なる結果が得られます。
ありません。理由についてはこちらをご覧ください。必要以上に機能しますが、パラメータrsync
があり--progress
ます。-a
など、権限を維持する、と-h
読める人間になります。
rsync -ah --progress source destination
出力は次のようになります。
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-r
ディレクトリを再帰するフラグもサポートしています。:それもCPの直接の代替としてエイリアスすることができますalias cp="rsync -ah --progress"
--progress
すると頭が回転しますmakes端末のすべての出力表示を見ています。AOLキーワード検索からここに来る人 rsync -ah --info=progress2 [source] [destination]
は、もう少し正気な👩⚕️方法で出力を提示します。
あなたのファイルが正しく転送されているかどうかを確認したい場合は、使用することができますgcp
し、gcp
CPようですが、デフォルトでは、あなたがコピーされているかを見ることができるようにあなたのプログレスバーを提供します。プログラムのwikiノートにあるgcp
ように、次のような便利な機能がいくつかあります。
- 転送進行表示
- エラー時に連続コピー(次のファイルにスキップ)
- copy status logging:gcpはすべてのアクションをログに記録するため、どのファイルが正常にコピーされたかを知ることができます
- ターゲットファイルシステムの制限を処理するための名前のマングリング(たとえば、FATの互換性のない文字「*」または「?」の削除)
ただし、ツールの使用時にプログレスバーが100%に達した場合でも、ターミナルプロンプトが再表示されるまで待ってからメディアを安全に取り外して、転送プロセスが正常に終了したことを確認する必要があります。
gcp
ファイルをコピーするために使用され--preserve
、さまざまな属性とアクセス許可を保持できる--recursive
ように、ディレクトリ全体をコピーできるようにするなどのオプションがあります。オプションの詳細については、オンラインでUbuntuのマンページにアクセスするman gcp
か、Ubuntuのマンページにアクセスしてください。このサイトではチュートリアルも利用できます。
gcp
リポジトリからインストールします
sudo apt-get install gcp
(注:Ubuntu 12.10では、新しい自動マウントポイントは、たとえば、です/media/user/usbdisk
)
次のように入力して、ファイルをメディアにコピーできます。
gcp /home/mike/file.mp4 /media/usb
フォルダーをメディアにコピーします
gcp -rv ~/Podcasts /media/Mik2
gcp
進行状況バーを使用したサンプル出力:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
もちろん、ディスクにコピーする複数のファイルまたはフォルダーを指定できますman gcp
。他にも多くのオプションがあります。
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
gcpを起動する前に設定するだけです。マシンがヘッドレスの場合、仮想フレームバッファーなどにxsessionを開始する必要があります。その時点で、おそらく別のプログラムを検索する必要があります
gcp
かなりまともですが、DBUS / X要件は奇妙です。sshフォワーディングを使用してSSHでこれを処理しましssh -X user@host
た。
この正確な目的のためにcURLを使用することで、私はキックを得ました。マニュアルページには、サポートされている「FILE」プロトコルがリストされているため、URLの他のプロトコルと同じように使用してください。
curl -o destination FILE://source
スピード、進行状況、残り時間など、すべておなじみの形式で。
速度は表示されませんが、複数のファイルをコピーする場合、コマンドの-v
オプションcp
は進捗情報を提供します。例えば
cp -rv old-directory new-directory
カーネルは、速度などのほとんどのデータを知っており、多くの場合はパーセンテージも知っています。最新のカーネルは、/ procファイルシステムを介してこれを公開します。
https://github.com/jnweiger/showspeedの showspeed はその情報を使用します。すでに実行中のプログラムに添付して、次のような定期的な更新を提供できます。
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 dd
してdd
そのステータスを表示することもできます。別のオプションはwatch -n 1 pkill -USR1 dd
、進行状況を定期的に(毎秒)表示することです。
progress
リポジトリにはさまざまなコマンドを調べ、それらの進捗情報を表示できるツールがあります。
コマンドを使用してインストールします
sudo apt-get install progress
このツールは次のように使用できます。
cp bigfile newfile & progress -mp $!
出力:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
しばらくはpv
地元に対処することができますcp
使用して、タスクdd
をpv
、ローカル(に対処することができますcp
)とリモート(scp
)タスク。
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
path/to/dest.mkv
出口を確認してくださいtouch path/to/dest.mkv
これにより進行状況を表示できますが、パーセンテージ情報が必要な場合は、
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
交換 100M
上記をソースファイルの実際のサイズにます。
一方ではscp
ほとんど使用して、現在の進行状況を表示することはできませんdd
とpv
ケーキの一部です。
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
多くの人が言ったように、cpにはこの機能は含まれていません。
私の0.02ドルを投げるために、私は通常、些細なコピー状況で何をしますか(つまり、no -R
):
ファイルの大きさを確認し、覚えておいてください
コピーを開始
別のターミナルを開く
watch ls -lh DIR
ターゲットがあるディレクトリで実行します
これにより、ターゲットファイルのサイズを最新の状態に保つことができ、手間が最小限に抑えられます。
ディレクトリを再帰的にコピーするなど、ささいな状況の代替手段として、watch du -hs DIR
DIRサイズの概要を確認するために使用できます。ただし、duは計算に時間がかかり、コピーが遅くなることもあるため、使用することをお勧めします。-n INTERVAL
。そのため、トレードオフが許容されるように引数をして監視することをお。
更新: watch duで使用されるコマンドでワイルドカードを使用する場合、例えばwatch du -hs backup/*
、引用することを忘れないでください:
watch "du -hs backup/*"
そうでない場合、ウォッチが開始されたときにワイルドカードは一度だけ展開されるため、duは新しいファイル/サブディレクトリを見ません。
dd status=progress
GNU Coreutils 8.24+(Ubuntu 16.04)に追加されたオプション:
dd if=src of=dst status=progress
端末には、次のタイプの行が表示されます。
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
rsync 3.1以上を使用している場合(rsync --version
)、アクセス許可と所有権を保持しながらコピー(cp -Rpn)、ディレクトリを再帰、「clobberなし」、全体的な進行状況(ファイルごとの進行状況ではなく)、コピーレート、および(非常に大まかな)推定残り時間:
sudo rsync -a --info=progress2 --no-i-r /source /destination
sudoは、所有していないディレクトリ/ファイルを扱う場合にのみ必要であることに注意してください。また、がない--no-i-r
場合、パーセンテージはコピー中のある時点でより低い数値にリセットされる場合があります。おそらくrsyncの以降のバージョンはinfo = progress2でno-irにデフォルト設定されますが、現在のバージョンの3.1.2ではそうではありません。
すでにファイルが含まれているディレクトリにコピーするとき(つまり、通常cp -n "no clobber"を使用するときのように)、残りの割合と時間が過大に見積もられていることがわかりました。
シェルスクリプトを使用します。
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
これは次のようになります。
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
属性を保持するもう1つのオプションがあります(source
フォルダの場合は作成されますdestination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
それが誰かに役立つことを願っています。転送時間を見積もるにdo -s source
は、事前に実行し、-s <size>
パラメータとしてに渡すことでこれを実現できますpv
。
-f -
冗長です。tar
のデフォルトの出力c
と入力はx
、stdoutとstdinです。
以下のgitリポジトリでprogress_barのソースコードを確認します
https://github.com/Kiran-Bose/supreme
カスタムbashスクリプトパッケージsupremeも試してください
debファイルをダウンロードしてdebianベースのディストリビューションにインストールするか、ソースファイルをダウンロードし、変更して他のディストリビューションに使用します
機能の概要
(1)アプリを開く---- Firefox ----電卓----設定
(2)ファイルの管理----検索----ナビゲート----クイックアクセス
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3)電話の管理----電話から移動/コピー----電話へ移動/コピー----フォルダーを同期
(4)USBの管理---- USBから移動/コピー---- USBに移動/コピー
pvは、cpであるか他の何かであるかに関係なく、pidが与えられたファイル記述子を監視する方法を知っています。
ドキュメントから:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
例:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pv
同じようなアクセス許可処理しないcp
ん...(私が試した1つの簡単なテストに基づいて:pv
..渡って実行ビットをコピーしませんでしたrsync
。やった