📜  cp 终端进度条 (1)

📅  最后修改于: 2023-12-03 15:14:16.122000             🧑  作者: Mango

终端进度条

在程序执行过程中,我们有时需要显示一个进度条,让用户知道程序的执行进度,同时也可以增强用户体验。本文介绍一种在终端中显示进度条的方法。

cp 命令

在介绍进度条前,我们先简单介绍一下 cp 命令。cp 是 Linux 系统中常用的一个命令,用于复制文件或目录。cp 命令的基本格式如下:

cp [options] source_file target_file

其中,source_file 表示原文件,target_file 表示目标文件。当 source_filetarget_file 在同一个目录下时, cp 命令会将 source_file 复制一份,并重命名为 target_file。当 target_file 指定为目录时,cp 命令会将 source_file 复制到该目录中。

进度条实现

下面介绍一种在终端中显示进度条的方法,以 cp 命令为例:

cp file1 file2 2> >(pv -n -s $(du -sb file1 | awk '{print $1}') > /dev/null)

在上面的命令中,我们使用了 pv 命令来实现进度条的显示。

2> >(command) 表示将标准错误输出重定向到一个子进程中。在上面的命令中,该子进程为 pv -n -s $(du -sb file1 | awk '{print $1}') > /dev/null,其中,pv 命令的参数解释如下:

  • -n 表示不显示进度条的百分比;
  • -s 表示文件总大小,这里使用 du -sb 命令来获取 file1 的大小;
  • > /dev/null 表示将 pv 命令的输出重定向到 /dev/null,即丢弃输出,避免在终端中产生多余的输出。

综上,上述命令的意思是:执行 cp file1 file2,将标准错误输出重定向到 pv 命令中,然后 pv 命令根据文件的大小来显示进度条。

效果演示

下面是使用上述命令复制一个大文件时的效果演示:

$ cp bigfile bigfile_copy 2> >(pv -n -s $(du -sb bigfile | awk '{print $1}') > /dev/null)
1.61GB 0:01:22 [19.6MB/s] [================================>] 100%

从上面的输出可以看出,进度条的样式和百分比都比较清晰,可以有效地让用户知道程序的执行进度和剩余时间,有利于提高用户体验。

总结

本文介绍了一种在终端中显示进度条的方法,通过 cp 命令的标准错误输出重定向到 pv 命令中,实现了进度条的显示效果。这种方法可以方便地应用于其他需要显示进度条的命令中,同时也可以根据需要自定义进度条的样式和显示方式。