我想将超过 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
您无法访问的文件(文件夹)中,因此您应该以单独的方式对其进行管理。
在所有选项中,您可以合并stderr
并stdout
在循环中添加条件for
,或者将错误保存在另一个 var(或文件)中并单独循环它们。