回答:
パッチを適用したcpとmvを構築し、両方が-gスイッチをサポートして進行状況を表示できるようにします。このページには手順とパッチがあります。ただし、ページに指示があります
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
これにより、元のcpおよびmvが上書きされます。これには2つの欠点があります。まず、更新されたcoreutilsパッケージがシステムに到着すると、それらは上書きされます。第二に、パッチを当てたバージョンに問題がある場合、標準のcpおよびmvに依存するスクリプトが破損する可能性があります。私はむしろこのようなことをしたい:
$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg
これは、ユーザーがコンパイルしたプログラム用の/ usr / local / binにファイルをコピーし、別の名前を付けます。したがって、プログレスバーが必要な場合はmvg -g bigfile /mnt/backup
、mvを通常どおり使用します。
また、あなたはalias mvg="/usr/local/mvg -g"
それを行うことができ、あなたは言うだけmvg bigfile /mnt/backup
で直接プログレスバーを取得します。
より簡単な解決策がある場合にcoreutilからバイナリを上書きするという考えは好きではないので、ここに私のものがあります。
rsync:Rsyncはファイルをコピー-P
し、進行状況バーのスイッチがあります。したがって、rsyncをインストールしている場合、シェルのドットファイルで単純なエイリアスを使用できます。
alias cp='rsync -aP'
欠点は、rsyncがcpよりも少し遅いことですが、これを時間で測定し、自分で判断する必要があります。
シェルスクリプト:シェルスクリプトはプログレスバーも作成できます。私はしばらく前にネットでこれを見つけましたが、ソースを覚えていません:
#!/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% [===============================> ]
バー:
'bar'-ASCIIプログレスバー付きの 'cat'
bar
は、あらゆる種類の操作(cp、tarなど)のプロセスバーを表示する小さなシェルスクリプトです。プロジェクトのホームページで例を見つけることができます。
また、ボーンシェル用に作成されているため、どこでも近くで実行されます。
bar
mv
まだラップしていません。
rsync
置き換えないことに注意してください。mv
btrfs
progress
実行中のコマンドに関連する任意の記述子を検索し、進行状況と速度を表示できる
新しいツールがあります。こちらから入手できます
progress -w
実行中のすべてのcp、mvなどの操作の統計を出力します
progress
インストール後に入力するだけで、mv
現在待機していたコマンドの進行状況が表示されました。ありがとう!
sudo
(同じユーザーだと思います)watch
-2秒ごとに何が起こっているかを言うのにも使用できますwatch progress -w
watch progress -w
単に使用することもできますprogress -m
パイプビューアーコマンドpv
を使用して、進行状況バーを表示できます。
pv /original/file > /new/file
私は頻繁に(と組み合わせる搭載したネットワークファイルシステム上の大きなファイルをコピーするためにこれを使用gzip
してtar
)。欠点は、ディレクトリではなく1つのファイルしかコピーできないことです。そして、あなたは新しいファイルに名前を付けなければなりません、あなたがするように単に目的のディレクトリを与えることはできませんcp
。ただし、コピーはpv
目的ではありません。これは強力なツールであり、ファイルをコピーするだけではありません。のその他の例については、ホームページをご覧くださいpv
。
より良いオプションはを使用することrsync -aP
です。mv
代わりに、フラグを追加する場合--remove-source-files
。.bashrc
コマンドを頻繁に使用する場合は、これを追加します。
alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'
ここでの欠点は、rsyncは進行状況のみを表示し、進行状況バーを表示しないことです。
tar cf - source-dir | pv | tar xf - -C out-dir
ディレクトリ全体のスループットが得られます。サイズがわかってい-s
てpvに渡すと、進捗状況もわかります。
進行状況バーを使用してディレクトリを移動/コピーするが、非ターミナルGUIを避けたい場合は、mc(Midnight Commander)が適しています。
私の解決策はを使用することrsync
です。ディレクトリをコピーし、コピーが成功した後にソースファイルを削除し(「移動」)、他の多くの機能の中でも進行状況レポートを表示できます(特に、部分的にコピーされたディレクトリの同期とネットワーク経由の作業)。
進行状況レポートを使用して、rsyncを使用してディレクトリを移動する方法を次に示します。
rsync -aP --remove-source-files $src $dst && rm -r $src
バックスラッシュで終わらないように$src
してください。そうしないと、GNUとは異なる意味になりますcp
。
rm -r
ので、最後には必要とされている--remove-source-files
各1が正常に、ディレクトリをいないコピーされた後だけに、ソースファイルを削除します。これ&&
により、rsyncが正常に完了した場合にのみ実行されます。あなたが被害妄想している場合は、再帰的なのいくつかの種類に置き換えることができますrmdir
など、find $src -d -exec rmdir {} +
唯一の問題-P
は、コピー操作全体ではなく、オプションが各ファイルの進行状況を表示することです。多くの小さなファイルがあるディレクトリを移動しようとしている場合、これは役に立たないかもしれません。rsyncの最新の開発バージョンには、--info=progress2
操作全体の進行状況を示す代替フラグがあります。
プログレスバーを追加するパッチ適用coreutil避けるためmv
とcp
、gcp
(Goffiのコピー機)が、新たな代替手段です。http://wiki.goffi.org/wiki/Gcp/en
再帰性および冗長性のcp
オプションと同じ方法を使用します。-r
-v
複数のコマンドが同時に呼び出されると、ファイルキューを使用します。また、コピーしたファイル名をログに記録することもできます。詳細については、ソース保存のマニュアルページセクションを参照してください。
ここから始めるのに良いチュートリアルがありますgcp
:http : //mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/
まず、コンピュータを30分以上使用したくないことがわかっている場合を除き、ioniceを使用せずに大きなファイルをコピーすることはありません。
2番目:パーティションはすべてジャーナリングされるため、パーティション内のコピーには時間がかかりません。長いコピーの場合はdu -sm
、ファイルとを実行しますdf -m | grep copy_to_partition
。その後、どれくらい時間がかかるか知りたい場合は、df
もう一度やり直して、コピーされたファイルの量を確認します。
私のミントでは、これまたはカールソリューションでgcpを使用するのが好きです(本当に素晴らしいです)
gcp SOURCE DESTINATION
あなたはそれをインストールする必要があるかもしれません sudo apt-get install gcp
そして、進行状況バーに関する非常に素晴らしく優れたタスクであり、
読みやすい形式で:
curl -o DESTINATION FILE://source
また、最初にインストールする必要があるかもしれません sudo apt-get install curl
gcp
ファイルの移動はサポートしていません。つまり、コピーが成功したらソースファイルを手動で削除する必要があります。
これはプログレスバーを提供しませんが、ヒットするCTRL-T
とSIGINFO
to を送信しmv
ます。これは、作業中のファイルとプロセスの進行状況を報告します。これは大きなファイルの転送に非常に便利で、多くの小さなファイルの転送にはあまり役に立たない可能性があります。
簡単な例:
mv 135/61 /Volumes/Jules/135/
# hit C-t
load: 1.08 cmd: cp 35470 uninterruptible 0.00u 0.04s
135/61/1/1-s2.0-S006738-main.pdf -> /Volumes/Jules/135/61/1/1-s2.0-S006738-main.pdf 68%
INFO: unknown signal; killall -l lists signals.
SIGINFOは標準POSIXではなく、一部のBSDでしかないと思います。
mv -v
移動したファイルごとに1行pv -l
を印刷し、行数(実際のファイル数)に基づいて進行状況を印刷するために使用します。
必要になりますpv
(パイプビューア):http : //www.ivarch.com/programs/pv.shtml
mv -v sourcedir targetdir | pv -l -s filecount > logfile
次のコマンドを使用して、ファイルカウントを取得します。
find sourcedir | wc -l
このコマンドは、コピーされたファイルの数に基づいて進捗情報を表示します。これは、小さなファイルが多数ある場合に最適です。巨大なファイルが数個しかない場合は、あまり楽しくありません。
mv
同じパーティション上では高速であることに注意してください。mv
別のパーティションへのがcp source target
続くのと同じになりますrm source
。そのため、進行状況情報を含むディレクトリをコピーする2つのコマンドがあります。
コピーされたファイルの数に基づいて進行状況を報告するには:
cp -av sourcedir targetdir | pv -l -s filecount > logfile
コピーされたバイトに基づいて進行状況を報告するには:
tar c sourcedir | pv -s size | tar x -C targetdir
詳細についてはこちらをご覧ください:pvによるディレクトリコピーの進捗情報