bash - linux複製捷徑 - 複製資料夾




如何在使用cp複製目錄時創建進度條? (7)

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


一個簡單的unix方法是轉到目標目錄並watch -n 5 du -s 。 也許通過顯示為一個酒吧使它更漂亮。 這可以在您只擁有標準unix工具且沒有安裝其他文件的範圍的環境中提供幫助。 du-sh是關鍵,手錶是每5秒做一次。 優點 :適用於任何unix系統缺點 :沒有進度條


怎麼樣的

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 / test / home / user / test / ....文件...我不知道如何告訴命令擺脫'/ home / user / test'部分。 這就是為什麼我必須從SRC目錄中運行它。


我首選的選項是高級複製 ,因為它使用原始的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


要在執行文件和文件夾及子文件夾(包括鏈接和文件屬性)的遞歸副本時顯示進度條,您可以使用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

請注意,它只顯示整個操作的一個進度條,而如果您希望每個文件有一個進度條,則可以使用rsync

rsync -ah --progress SRC DEST

要添加其他選項,可以使用cpv 。 它使用pv來模仿cp的用法。

它的工作方式與pv類似,但您可以使用它來遞歸複製目錄

你可以here得到它


你也可以使用rsync代替cp如下所示:

rsync -Pa source destination

這將為您提供進度條和預計完成時間。 非常便利。







cp