奇技淫巧 - 给Linux中的cp和mv命令中添加进度条的高级拷贝

系统 Linux
GNU cp和GNU mv命令用于在GNU/Linux操作系统中复制和移动文件和目录。这两个命令缺少的一个特性是它们不显示任何进度条。

 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源代码。 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.32.tar.xz 

使用命令解压下载档案: 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ tar xJf coreutils-8.32.tar.xz 

这个命令将在当前目录中提取一个名为coreutils-8.32的文件夹中的coreutils存档。cd进去: 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ cd coreutils-8.32/ 

使用以下命令下载Advanced Copy补丁: 

  1. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ wget https://raw.githubusercontent.com/jarun/advcpmv/master/advcpmv-0.8-8.32.patch  

最后,通过逐个运行以下命令应用补丁: 

  1. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ patch -p1 -i advcpmv-0.8-8.32.patch  
  2. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ ./configure 

 

  1. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ make 

现在将在coreuths -8.32/src文件夹中创建两个新的补丁二进制文件cp和mv。只需像下面这样将它们复制到你的$PATH: 

  1. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ sudo cp src/cp /usr/local/bin/cp  
  2. [sudo] linuxmi 的密码:  
  3. linuxmi@linuxmi:~/www.linuxmi.com/coreutils-8.32$ sudo cp src/mv /usr/local/bin/mv  

就这样。cp和mv命令现在有了进度条功能。

当你在复制或移动文件和目录时想要一个进度条,只需添加 -g 标签,如下所示: 

  1. 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 标签: 

  1. 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. 1 files ( 2.5 GiB) copied in 42.0 seconds ( 61.1 MiB/s). 

要递归复制一个目录及其子目录,只需添加-R标志: 

  1. $ cp -gR directory1/ directory2/ 

类似地,使用mv命令移动文件,运行: 

  1. $ mv -g archlinux.iso mydownload/ 

或者,使用--progress-bar标志: 

  1. $ mv --progress-bar archlinux.iso mydownload/ 

使用mv命令移动目录:

 

  1. $ mv -g directory1/ directory2/ 

您还可以编辑~/.bashrc文件创建别名来节省几个按键: 

  1. $ nano ~/.bashrc 

在末尾添加以下几行: 

  1. alias cp='/usr/local/bin/cp -gR'  
  2. alias mv='/usr/local/bin/mv -g'  

按Ctrl+o和Ctl+x保存和关闭文件。

现在运行以下命令使更改生效: 

  1. $ source ~/.bashrc 

从现在开始,您可以只使用cp或mv命令,而不需要使用 -g (或 --progress-bar)标志。

请注意,原始程序没有被覆盖。您仍然可以在任何时候通过/usr/bin/cp或/usr/bin/mv调用它们

如果您经常复制或移动大量大文件和目录,那么在cp和mv命令中添加进度条功能是个很好的方法。您现在可以看到在复制和移动文件时到底发生了什么,而不是时时盯着屏幕。 

 

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2020-11-02 18:27:29

进度条Linuxcp

2022-07-20 09:10:47

Linux

2021-06-15 08:02:27

Python进度条Tqdm

2022-09-30 12:55:14

Linux笔记

2022-01-07 14:50:46

VS CodeLinux代码

2017-08-18 13:30:01

前端CSS布局奇技

2020-05-20 19:38:11

前端js调试工具

2022-04-21 15:00:53

LinuxShell

2023-06-26 08:05:36

2021-04-12 06:09:38

Spring扩展点应用

2021-03-30 07:47:46

SVG 滤镜 CSS技巧

2017-10-24 13:42:55

流氓App安卓Google

2022-04-24 16:00:15

LinuxLinux命令ls命令

2019-04-25 13:10:04

Java 8Stream API编程语言

2020-11-26 11:45:31

Python绘图代码

2015-01-12 12:13:03

Android进度条ProgressDia

2015-01-12 09:30:54

Android进度条ProgressDia

2021-06-07 12:20:14

LinuxASCII命令

2021-05-18 13:05:31

LinuxRust复用器

2021-02-25 09:19:11

LinuxAppimage命令
点赞
收藏

51CTO技术栈公众号