使用 移动大型目录时mv
,有没有办法查看进度(%)?cp
gentoo 上的命令有一个显示-g
进度的开关。
答案1
答案2
当有更简单的解决方案时,我不喜欢从 coreutil 覆盖二进制文件的想法,所以这是我的:
同步:rsync复制文件并有-P
进度条开关。因此,如果您安装了 rsync,则可以在 shell 点文件中使用一个简单的别名:
alias cp='rsync -aP'
缺点是,rsync 比 cp 慢一点,但你应该用时间来衡量这一点并自行决定,我可以忍受:-)
外壳脚本:shell脚本也可以创建进度条。我不久前在网上发现了这个,我不记得出处了:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
这看起来像:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
酒吧:
'bar' - 带有 ASCII 进度条的 'cat'
bar
是一个小 shell 脚本,用于显示所有类型操作(cp、tar 等)的进程栏。您可以在以下位置找到示例项目主页。
它也是为 bourne shell 编写的,因此它可以在附近的任何地方运行。
答案3
您可以构建一个修补的 cp 和 mv,然后它们都支持 -g 开关来显示进度。有说明和补丁这一页。然而:页面会指导您进行操作
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
覆盖原来的cp和mv。这有两个缺点:首先,如果更新的 coreutils 软件包到达您的系统,它们将被覆盖。其次,如果修补版本有问题,他们可能会破坏依赖标准 cp 和 mv 的脚本。我宁愿做这样的事情:
$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg
它将文件复制到 /usr/local/bin ,用于用户编译的程序,并给它们一个不同的名称。所以当你想要一个进度条时,你mvg -g bigfile /mnt/backup
通常会说并使用 mv 。
您也可以alias mvg="/usr/local/mvg -g"
这样做,您只需要说出mvg bigfile /mnt/backup
并直接获取进度条。
答案4
如果您的目标是移动/复制带有进度条的目录,但避免非终端 GUI,mc(Midnight Commander)是一个不错的选择。