我正在尝试在使用smbclient put进行远程复制时显示进度条,可以使用pv或dialog或任何其他选项。
smbclient-put命令运行良好:
smbclient //usbrouter/backup --user=myusername mypassword -c "put /media/DOC/BackupAuto/work_backup.tar.gz work_backup.tar.gz"
但我找不到任何方法来显示复制的进度。 有人有解决方案/替代方案吗?
谢谢。
当我想要检查一个文件传输操作时,如果它不支持进度条或者我忘记在进度条模式下启动它,我会这样做。
计算出文件本地副本的总大小(例如使用 ls
、stat
或 du
),然后转到目标文件的位置(如果是在同一台机器上,则使用 cd
,否则使用 ssh
)。发出以下命令:
watch -- du -h work_backup.tar.gz
这有点狡猾,但即使在启动相应的复制作业后,它仍然有效,并且几乎可以使用我能想象到的任何复制机制。
正如你所提到的,pv
非常适合这项工作:
file="work_backup.tar.gz"
pv "/media/DOC/BackupAuto/${file}" \
| smbclient \
--user=myusername%mypassword \
--command "put - '${file}'" \
//usbrouter/backup
或者反过来,带有进度地拉取:
file="work_backup.tar.gz"
size="$( \
smbclient \
--user=myusername%mypassword \
--command "ls '${file}'" \
//usbrouter/backup \
2> /dev/null \
| grep "${file}" \
| awk '{print $3}')"
smbclient \
--stderr \
--user=myusername%mypassword \
--command "get '${file}' /dev/stdout" \
//usbrouter/backup \
| pv -s "${size}" \
> "/media/DOC/BackupAuto/${file}"
必要的侧面说明:您不应该像这样指定密码,而是使用其他选项之一,例如--authentication-file
--
是用来做什么的? - rodvlopes