使用 smbclient 在脚本中将文件从 Virtualbox 来宾传输到主机

使用 smbclient 在脚本中将文件从 Virtualbox 来宾传输到主机

我正在尝试开发一个将在 CentOS 7 计算机上运行的脚本,但现在我正在 Virtualbox 实例(也是 CentOS 7)中开发它。该脚本将处理多个任务,但我遇到麻烦的部分是将数百个大文件发送到 Windows 计算机(目前是我的电脑或 Virtualbox 主机)。

两个问题:

A) 将文件发送到主机。

当前的尝试如下:

find "${FILES_DIR}" -print0 | while read -d $'\0' file
do
  if [ ${file: -4} == ".zip" ]
  then
    smbclient //${WINDOWS_IP}/${WINDOWS_DIR} -U ${WINDOWS_USERNAME}%${WINDOWS_PASSWORD} -c "put ${file}"
  fi
done

其中 WINDOWS_IP 是 enp0s3.inet,WINDOWS_DIR 是主机上的共享文件夹。问题是我不断收到连接拒绝错误,并且我不知道从这里去哪里。

B) 确认文件传输成功

smbclient 是否返回任何我可以用来检查文件是否已成功传输的内容?

答案1

至于 (B),我的smbclient至少对于某些错误确实返回退出代码。您可以$?在 shell 中使用来获取最后一个命令的退出代码。退出代码为零表示“正常”,非零表示错误,对于我引发的错误,退出代码为 1(但其他退出代码也是可能的,并且并非所有错误都可能设置退出代码)。

(A)中提到的“连接被拒绝”错误可能有多种原因,很难通过问答来调试。至少提供一些信息,在什么情况下发生或不发生错误,ping远程计算机是否工作,是否检查了防火墙设置等。

顺便说一句,您还可以将命令通过管道传输到 中smbclient,如下所示

echo "put ${file}" | smbclient "//${WINDOWS_IP}/${WINDOWS_DIR}" -U "${WINDOWS_USERNAME}%${WINDOWS_PASSWORD}"

如果随机失败,这可能会或可能不会有助于传输大量文件,因为可以避免每次都建立新连接。

请考虑正确转义所有内容(我添加了引号)。我们不知道您使用的真实值,错误的转义可能会破坏主机、用户或密码,并且可能是失败的原因。

相关内容