2011-08-19 54 views
37

我想我可以將源目錄中的文件數量與cp進展時目標目錄中的文件數量進行比較,也可以使用文件夾大小進行比較?我試圖找到示例,但所有bash進度條似乎都是爲複製單個文件而編寫的。我想複製一堆文件(或者一個目錄,如果前者是不可能的)。如何製作進度條(cp複製目錄)?

+11

你打[猛砸FAQ#44](HTTP:// mywiki .wooledge.org/BashFAQ/044)。看一看,看看有沒有什麼有用的建議。 – jw013

回答

7

您可能會看到工具vcp。這是一個簡單的複製工具,帶有兩個進度條:一個用於當前文件,另一個用於整體。

編輯

這裏是鏈接到源:http://members.iinet.net.au/~lynx/vcp/ 聯機幫助頁可以在這裏找到:http://linux.die.net/man/1/vcp

大多數分佈有一個包吧。

+0

我希望有些東西不需要編譯外部工具。我只想看到我的目錄被複制。這真的很難嗎? – octosquidopus

+0

@Anonymouse添加了第二個答案,也許這將是您的替代方案。但這是我最後的想法:( –

+1

如下所述,rsync可用於所有系統(甚至Mac OS),而不是vcp。 – Adrien

4

這裏另一種解決方案:使用工具bar

你可以調用它是這樣的:

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

你必須去在焦油的方式,這將是小文件不準確的。你也必須注意目標目錄的存在。但這是一種方式。

+0

早些時候,我想在移動文件夾之前先對文件夾進行去皮處理,但認爲它在優雅中缺少太多。我錯了,它按預期工作,在某些情況下可能是更好的解決方案。謝謝! – octosquidopus

49

Ubuntu的版本,你也可以用rsync代替cp這樣的:

rsync -Pa source destination

哪會給你一個進度條和預計完成時間。非常便利。

+6

對,'rsync --progress/path/to/origin/path/to/destination'很棒,可用於所有系統。 – Adrien

+0

複製單個文件時也適用。 – Nathan

+0

發生rsync和cp之間的速度比較? – Allasso

18

要顯示一個進度條,而這樣做的文件&文件夾&子文件夾(包括鏈接和文件屬性),你可以使用gcp的遞歸複製(通過運行容易安裝在Ubuntu和Debian的「命令和apt-get安裝GCP」) :

gcp -rf SRC DEST 

這裏是典型的輸出,同時複製文件的一個大文件夾:

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

注意,它顯示了整個操作只需一個進度條,而如果你想每個文件一個進度條,你可以使用rsync

rsync -ah --progress SRC DEST 
+1

gcp是基於Python的。請不要在生產中使用。我沒有檢查,但似乎不支持硬鏈接,特殊屬性等。 – socketpair

+0

gcp在遠程終端中不起作用(例如通過ssh)。 –

2

一個簡單的UNIX方法就是去到目標目錄並做watch -n 5 du -s。也許通過顯示爲一個酒吧讓它更漂亮。這可以在你只有標準的unix utils而沒有安裝額外文件的環境中提供幫助。 du-sh是關鍵,手錶是每5秒鐘做一次。 優點:適用於任何UNIX系統缺點上:沒有進度條

1

我的首選是Advanced Copy,因爲它使用的原cp源文件。現在

$ 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 
+0

zwicke.org上的補丁鏈接已損壞,但位於https://github.com/atdt/advcpmv的github上。也許比我更熟練的人會更新@ elboletaire的步驟。 – Setaa

+0

我可以做到這一點,感謝修補程序的鏈接 – elboletaire

0

如何像

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

它發現在當前目錄下的所有文件,管道,雖然給予通過PV PV的估計大小等等進度表工作,然後使用--parents標誌將其傳遞給CP命令,以便DEST路徑與SRC路徑相匹配。

的一個問題,我還沒有克服的是,如果您發出此命令

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

目標路徑變爲/ WWW /測試/首頁/用戶/測試/ ....文件...和我我不確定如何告訴命令擺脫'/ home/user/test'部分。這就是爲什麼我必須從SRC目錄內運行它。

0

要添加另一個選項,您可以使用cpv。它使用pv來模仿cp的使用。

它就像pv,但你可以用它來複制遞歸目錄

enter image description here

你可以得到它here