let*_*nje 155 command-line progress-information mv
使用 移动大目录时mv,有没有办法查看进度 (%)?cpgentoo 上的命令有一个-g显示进度的开关。
nau*_*tur 136
有一个名为的新工具progress可以找到与正在运行的命令相关的任何描述符并显示进度和速度:
在此处可用
progress -w
Run Code Online (Sandbox Code Playgroud)
输出所有正在运行的 cp、mv 等操作的统计信息
ech*_*hox 101
当有更简单的解决方案时,我不喜欢从 coreutil 覆盖二进制文件的想法,所以这里是我的:
rsync : Rsync 复制文件并有-P一个进度条开关。因此,如果您安装了 rsync,则可以在 shell dotfile 中使用一个简单的别名:
alias cp='rsync -aP'
Run Code Online (Sandbox Code Playgroud)
缺点是,rsync 比 cp 慢一点,但你应该随着时间的推移衡量这一点并为你自己决定,我可以接受:-)
Shell 脚本: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
}
Run Code Online (Sandbox Code Playgroud)
这将如下所示:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Run Code Online (Sandbox Code Playgroud)
酒吧:
'bar' - 带有 ASCII 进度条的 'cat'
bar是一个小的 shell 脚本,用于显示所有类型操作(cp、tar 等)的进程栏。您可以在项目主页上找到示例。
它也是为 bourne shell 编写的,所以它会在附近到处运行。
fsc*_*itt 57
您可以构建一个修补的 cp 和 mv,然后它们都支持 -g 开关以显示进度。此页面上有说明和补丁。但是:该页面指示您执行
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
Run Code Online (Sandbox Code Playgroud)
它覆盖了原来的 cp 和 mv。这有两个缺点:首先,如果更新的 coreutils 包到达您的系统,它们将被覆盖。其次,如果补丁版本有问题,他们可能会破坏依赖标准 cp 和 mv 的脚本。我宁愿做这样的事情:
$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg
Run Code Online (Sandbox Code Playgroud)
它将文件复制到 /usr/local/bin ,用于用户编译的程序并给它们一个不同的名称。所以当你想要一个进度条时,你mvg -g bigfile /mnt/backup通常会说和使用 mv 。
你也可以这样做,alias mvg="/usr/local/mvg -g"然后你只需要说mvg bigfile /mnt/backup并直接得到进度条。
Lam*_*mnk 40
您可以使用管道查看器命令pv来显示进度条:
pv /original/file > /new/file
Run Code Online (Sandbox Code Playgroud)
我经常使用它来通过已安装的网络文件系统复制大文件(结合gzip和tar)。缺点是只能复制一个文件,不能复制目录。而且你必须给新文件一个名字,你不能像cp那样只给目标目录。然而,复制不是pv的目的。它是一个强大的工具,可以做的不仅仅是复制文件。有关更多示例,请参阅主页pv。
更好的选择是使用rsync -aP. 如果您想mv改为,请附加标志--remove-source-files。.bashrc如果您想经常使用这些命令,请将其添加到您的:
alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'
Run Code Online (Sandbox Code Playgroud)
这里的缺点是 rsync 只显示进度,而不是进度条。
我的解决方案是使用rsync. 它可以复制目录,在成功复制后删除源文件(从而“移动”它们)并显示进度报告,以及许多其他功能(最显着的是同步部分复制的目录和通过网络工作。)
这是我如何使用 rsync 移动目录,并带有进度报告:
rsync -aP --remove-source-files $src $dst && rm -r $src
Run Code Online (Sandbox Code Playgroud)
确保选中$src并不能以反斜线结束,否则你会得到比GNU的不同的含义cp。
将rm -r在年底需要,因为--remove-source-files仅删除源文件,前后每一个被成功复制,而不是目录。该&&会确保它只有rsync的成功完成运行。如果你是偏执狂,你可以用某种递归替换它rmdir,比如find $src -d -exec rmdir {} +
唯一的问题是该-P选项显示每个文件的进度,而不是整个复制操作的进度。如果您尝试移动包含许多小文件的目录,这可能没用。rsync 的最新开发版本有一个备用标志--info=progress2,显示整个操作的进度。
| 归档时间: |
|
| 查看次数: |
185305 次 |
| 最近记录: |