细节:

细节:

我想将超过 40 天的文件从远程传输到本地主机。我能够连接远程服务器,但无法将文件从远程传输到本地服务器。它会导致错误,提示没有文件没有这样的文件或目录,但该文件存在于远程主机上。

细节:

file=`sshpass -p "password" ssh username@server_ip "find /arch -type f -ctime -40"`
sshpass -p "password" scp -r  username@server_ip:$file /arch
echo SCP Completed.

错误详情:

cp: cannot stat ‘/arch/file1.xls’: No such file or directory

答案1

你必须注意一两件事:

  • 权限:您可能没有读取文件的正确权限;
  • 多行答案:您的查找可能会为您提供多个文件作为结果。

长话短说,可能你的问题不是sshpass

从现在开始,我们理所当然地认为您不存在与权限相关的问题。

你可以做的是这样的:

files="$(sshpass -p "passwd" ssh -l username rhost "find /arch -type f -ctime -40")"
for file in ${files}; do
  if sshpass -p "passwd" scp "username@rhost:${file}" /arch; then
    printf "SCP Completed\n"
  fi
done

理论上,$files不会包含您无法抓取的内容,因为find会打印在stderr您无法访问的文件(文件夹)中,因此您应该以单独的方式对其进行管理。

在所有选项中,您可以合并stderrstdout在循环中添加条件for,或者将错误保存在另一个 var(或文件)中并单独循环它们。

相关内容