web-dev-qa-db-ja.com

cpでディレクトリをコピーしているときにプログレスバーを作成するにはどうすればよいですか?

Cpが進行するにつれて、ソースディレクトリ内のファイルの数をターゲットディレクトリ内のファイルの数と比較できると思いますか、または代わりにフォルダサイズでそれを行うことができますか?私は例を見つけようとしましたが、すべてのbashプログレスバーは単一のファイルをコピーするために書かれているようです。大量のファイル(または前者が不可能な場合はディレクトリ)をコピーしたい。

44
octosquidopus

次のようにrsyncの代わりにcpを使用することもできます。

rsync -Pa source destination

これにより、進捗バーと完了予定時刻が表示されます。とても便利な。

55
SteveLambert

ファイルとフォルダーとサブフォルダー(リンクとファイル属性を含む)の再帰コピー中に進行状況バーを表示するには、gcp(「Sudo apt-get install gcp」を実行してUbuntuおよびDebianに簡単にインストールできます) ):

gcp -rf SRC DEST

ファイルの大きなフォルダーをコピーする際の一般的な出力は次のとおりです。

Copying 1.33 GiB  73% |#####################      | 230.19 M/s ETA:  00:00:07

操作全体に対して1つの進行状況バーのみが表示されることに注意してください。一方、ファイルごとに1つの進行状況バーが必要な場合は、rsyncを使用できます。

rsync -ah --progress SRC DEST
23
Shervin Emami

ツールvcpをご覧ください。これは、2つの進行状況バーを備えた単純なコピーツールです。1つは現在のファイル用、もう1つは全体用です。

[〜#〜] edit [〜#〜]

ここにソースへのリンクがあります: http://members.iinet.net.au/~lynx/vcp/ マンページはここにあります: http://linux.die。 net/man/1/vcp

ほとんどのディストリビューションには、そのためのパッケージがあります。

7
Thomas Berger

ここで別の解決策:ツールbarを使用します

次のように呼び出すことができます。

#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}

Tarを経由する必要があり、小さなファイルでは不正確になります。また、ターゲットディレクトリが存在することに注意する必要があります。しかし、それは方法です。

4
Thomas Berger

simple unix方法は、宛先ディレクトリに移動してwatch -n 5 du -s。おそらく、バーとして表示することで、それをより美しくします。これは、標準のUNIXユーティリティだけがあり、追加のファイルをインストールする範囲がない環境で役立ちます。 du-shが鍵であり、監視は5秒ごとに行うことです。 長所:任意のUNIXシステムで動作します短所:プログレスバーなし

2
Nishant

私の優先オプションは、元のcpソースファイルを使用するため、 Advanced Copy です。

$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
$ patch -p1 -i advcpmv-0.5-8.21.patch
$ ./configure
$ make

新しいプログラムは現在、src/cpおよびsrc/mvにあります。既存のコマンドを置き換えることを選択できます。

$ Sudo cp src/cp /usr/local/bin/cp
$ Sudo cp src/mv /usr/local/bin/mv
1
elboletaire

別のオプションを追加するには、cpvを使用できます。 pvを使用して、cpの使用を模倣します。

pvのように機能しますが、これを使用して再帰的にディレクトリをコピーできます

enter image description here

あなたはそれを得ることができます ここ

1
nachoparker

これを正確に行うツールpvがあります。 http://www.ivarch.com/programs/pv.shtml

AptにはUbuntuのバージョンがあります

0
Foo Bah

のようなものはどうですか

find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})

現在のディレクトリ内のすべてのファイルを検索し、PVを介してパイプを通過させて、PVに推定サイズを与え、進行状況メーターが機能するようにします。

まだ克服していない問題の1つは、このコマンドを発行すると

find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})

宛先パスは/ www/test/home/user/test/.... FILES ...になり、「/ home/user/test」部分を削除するようにコマンドに指示する方法がわかりません。そのため、SRCディレクトリ内から実行する必要があります。

0
Ken Brill

以下のgitリポジトリのprogress_barのソースコードを確認してください

https://github.com/Kiran-Bose/supreme

また、カスタムbashスクリプトパッケージsupremeを試して、プログレスバーの動作を確認しますcpおよびmvコマンド

機能の概要

(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に移動/コピー

0
KIRAN B