奇技淫巧 - 給Linux中的cp和mv命令中添加進度條的高級拷貝
GNU cp和GNU mv命令用于在GNU/Linux操作系統中復制和移動文件和目錄。這兩個命令缺少的一個特性是它們不顯示任何進度條。如果復制一個大文件或目錄,您就不知道完成復制過程需要多長時間,也不知道復制的數據所占的百分比。還有您將看不到當前正在復制哪個文件或者已經復制了多少個文件。你將看到的只是閃爍的光標和硬盤驅動器LED指示燈。多虧了Advanced Copy (Gnu Coreutils的一個補丁),我們現在可以在Linux中的cp和mv命令中添加進度條,并在復制和/或移動大文件和目錄時顯示進度條。
高級拷貝(Advanced Copy)是GNU cp和GNU mv程序的一個模塊。它會添加一個進度條,并提供一些有關復制或移動文件和文件夾時發生情況的信息。不僅是進度條,它還顯示數據傳輸速率、估計剩余時間和當前正在復制的文件名。最后,您將看到一個簡短的摘要,說明復制了多少個文件以及復制這些文件所用的時間。
安裝“Advanced Copy”補丁,將進度條添加到Linux的cp和mv命令中
cp和mv命令是GNU coreutils的一部分。所以你需要從這里下載最新的GNU源代碼。
- linuxmi@linuxmi:~/www.linuxmi.com$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.32.tar.xz
使用命令解壓下載檔案:
- linuxmi@linuxmi:~/www.linuxmi.com$ tar xJf coreutils-8.32.tar.xz
這個命令將在當前目錄中提取一個名為coreutils-8.32的文件夾中的coreutils存檔。cd進去:
- linuxmi@linuxmi:~/www.linuxmi.com$ cd coreutils-8.32/
使用以下命令下載Advanced Copy補丁:
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ wget https://raw.githubusercontent.com/jarun/advcpmv/master/advcpmv-0.8-8.32.patch
最后,通過逐個運行以下命令應用補丁:
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ patch -p1 -i advcpmv-0.8-8.32.patch
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ ./configure
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ make
現在將在coreuths -8.32/src文件夾中創建兩個新的補丁二進制文件cp和mv。只需像下面這樣將它們復制到你的$PATH:
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ sudo cp src/cp /usr/local/bin/cp
- [sudo] linuxmi 的密碼:
- linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ sudo cp src/mv /usr/local/bin/mv
就這樣。cp和mv命令現在有了進度條功能。
當你在復制或移動文件和目錄時想要一個進度條,只需添加 -g 標簽,如下所示:
- linuxmi@linuxmi:~/www.linuxmi.com$ cp -g /home/linuxmi/Fedora-Silverblue-ostree-x86_64-32-1.6.iso /home/linuxmi/www.linuxmi.com/
或者使用 --progress-bar 標簽:
- linuxmi@linuxmi:~/www.linuxmi.com$ cp --progress-bar /home/linuxmi/Fedora-Silverblue-ostree-x86_64-32-1.6.iso /home/linuxmi/www.linuxmi.com/
樣例輸出如下圖:
在Linux中向cp和mv命令添加進度條
在復制過程的最后,您將看到復制了多少文件,復制文件花費了多長時間,以及每秒的數據傳輸速率。怎樣,很不錯吧?
- 1 files ( 2.5 GiB) copied in 42.0 seconds ( 61.1 MiB/s).
要遞歸復制一個目錄及其子目錄,只需添加-R標志:
- $ cp -gR directory1/ directory2/
類似地,使用mv命令移動文件,運行:
- $ mv -g archlinux.iso mydownload/
或者,使用--progress-bar標志:
- $ mv --progress-bar archlinux.iso mydownload/
使用mv命令移動目錄:
- $ mv -g directory1/ directory2/
您還可以編輯~/.bashrc文件創建別名來節省幾個按鍵:
- $ nano ~/.bashrc
在末尾添加以下幾行:
- alias cp='/usr/local/bin/cp -gR'
- alias mv='/usr/local/bin/mv -g'
按Ctrl+o和Ctl+x保存和關閉文件。
現在運行以下命令使更改生效:
- $ source ~/.bashrc
從現在開始,您可以只使用cp或mv命令,而不需要使用 -g (或 --progress-bar)標志。
請注意,原始程序沒有被覆蓋。您仍然可以在任何時候通過/usr/bin/cp或/usr/bin/mv調用它們
如果您經常復制或移動大量大文件和目錄,那么在cp和mv命令中添加進度條功能是個很好的方法。您現在可以看到在復制和移動文件時到底發生了什么,而不是時時盯著屏幕。