如何顯示 Linux 命令的進度條

許多 Linux 命令(如 dd、cp、rsync 和 mv)都是漸進式的,但在運行時沒有顯示進度條。 除了最近提交的少數命令( dd 命令在 GNU coreutils 版本 8.24 中具有 status=progress )之外,沒有內置的方法來檢查正在進行的操作的進度。

在本文中,我們將介紹某些 Linux 工具和選項,它們可讓您監控數據傳輸的進度。

另請閱讀: Pipe Viewer – Linux 中查看命令進度的工具

1) PV 命令

Pv 是一個基於命令行的工具,允許您監控使用管道傳輸的數據的進度。 pv 命令為您提供以下信息的可視化視圖。

  • 時間流逝
  • 使用進度條完成的百分比。
  • 當前吞吐率。
  • 傳輸的總數據。
  • ETA(預計時間)。

安裝光伏

您可以使用以下命令在發行版上安裝 pv

Fedora, CentOS 和 RHEL

# yum install pv

Debian、Ubuntu 和 Linux Mint

# apt-get install pv

Gentoo Linux

# emerge --ask sys-apps/pv

FreeBSD Linux

# cd /usr/ports/sysutils/pv/
# make install clean

光伏使用示例

pv 的一般語法是 pv [Options] [File]

-p 選項打開進度條, -t 選項激活 pv 運行的總經過時間, -e 選項根據傳輸速率和數據大小提供完成的 ETA, -r 選項顯示當前的傳輸速率,最後顯示 -b 選項顯示到目前為止傳輸的數據總量。

使用 gzip 監控創建存檔的進度

在這 example,我們在下面使用 pv 和 gzip example:

pv -tpre ~/Desktop/testfile.iso | gzip > ~/Desktop/testfile.gz
213MiB 0:00:14 [17.8MiB/s] [=========> ] 32% ETA 0:00:29

在這 example,我們提供選項和相關文件,然後將其通過管道傳送到 gzip,並重定向到我們要存檔的文件。

使用 pv 複製文件時監控進度

$ pv ~/Desktop/testfolder/* > ~/Desktop/

667MiB 0:00:13 [50.5MiB/s] [================================>] 100%

使用沒有任何選項的 pv 將自動以默認值運行 p, t, e,rb 選項。

使用 pv 和 dialog 命令創建對話框進度條

pv ~/Desktop/testfile.iso > ~/Desktop/destinationfile.iso | dialog --gauge "Progress" 10 70

2) 進展

Progress,以前稱為 cv,是一種工具,用於顯示從 coreutils 基本命令(如 p、mv、dd、tar、gzip/gunzip、cat 等)複製數據的百分比。它還可以提供附加信息,例如 ETA 和全長。

安裝進度

您可以通過這些步驟在任何發行版上安裝進度。

sudo apt-get install libncurses5-dev (for Debian/Ubuntu) users.
# git clone https://github.com/Xfennec/progress.git
# make
# make install

帶示例的進度用法

進度的一般語法是 watch progress -q. 這使您可以在終端窗口中監控所有當前和即將進行的傳輸。 現在,您調用的任何 coreutils 實用程序(如 cp 和 mv)都將被檢測到並顯示在進度窗口中。

監控下載

progress -wc google-chrome

-c 選項可用於監視命令名稱,如 google-chrome 或者 firefox

3) 同步

Rsync 用於本地和遠程同步文件。 Rsync 可用於復製文件,還可以在不使用外部應用程序的情況下顯示進度。

安裝 Rsync

Fedora, CentOS 和 RHEL

# yum install rsync

Debian、Ubuntu 和 Linux Mint

# apt-get install rsync

Rsync 使用示例

您需要將 rsync 與 -P 或者 --progress 在文件傳輸過程中顯示進度的選項。 rsync 的基本語法是

rsync --progress source destination

或者

rsync -P source destination

要將 zip 文件從桌面複製到新文件夾,請輸入:

$ rsync -P ~/Desktop/myfiles.zip ~/Desktop/newfolder
 321,683,456 45% 3.17MB/s 0:01:56

從 / 複製文件example/*.tar 到名為 [email protected] 的遠程服務器,輸入:

rsync -av -P /example/*.tar [email protected]:~

4) 高級複製

高級複製,或 advcpmv,是 cp 和 mv 實用程序的一個 mod,它添加了一個進度條並提供了一些有關正在進行的傳輸的信息。

安裝高級副本

您可以通過這些步驟在任何發行版上安裝進度。

# wget https://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
# tar xvJf coreutils-8.21.tar.xz
# cd coreutils-8.21/
# wget https://github.com/atdt/advcpmv/blob/master/advcpmv-0.5-8.21.patch
# patch -p1 -i advcpmv-0.5-8.21.patch
# ./configure
# make

在運行“./configure”命令時,您可能會收到此錯誤。

checking whether mknod can create fifo without root privileges... configure: error: in `/home/xxx/coreutils-8.21': configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check) See `config.log' for more details

運行以下命令來修復該錯誤並再次重新運行 ./configure 命令:

# export FORCE_UNSAFE_CONFIGURE=1

用這兩個新命令替換原來的 cp 和 mv 命令

# cp src/cp /usr/local/bin/cp
# cp src/mv /usr/local/bin/mv

高級複製使用示例

cp 和 mv 命令保持不變,唯一的變化是添加了 -g 或者 -progress-bar cp 命令的選項。 這 -R 選項用於遞歸複製目錄。 這是一個 example 命令的:

$ cp -gR /home/linoxide /home/linoxide/Desktop

或者

# cp -R --progress-bar home/linoxide /home/linoxide/Desktop

我們已經看到了一些工具以及如何使用它們來監視命令的進度。 pv 命令易於設置並且可以監視任何命令行活動。 進度實用程序僅限於 coreutils 命令。 Rsync 具有監控文件傳輸的內置功能,高級副本是一個補丁,僅適用於 cp 和 mv 命令以顯示進度。 根據您的試用,您可以決定哪些最適合您。