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
有一個工具pv
可以做到這一點: http://www.ivarch.com/programs/pv.shtml : http://www.ivarch.com/programs/pv.shtml
apt中有一個ubuntu版本
要在執行文件和文件夾及子文件夾(包括鏈接和文件屬性)的遞歸副本時顯示進度條,您可以使用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
你也可以使用rsync
代替cp
如下所示:
rsync -Pa source destination
這將為您提供進度條和預計完成時間。 非常便利。