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つか2つのことを世話する必要があります:
簡単に言えば、おそらくあなたの問題は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(またはファイル)に保存して別々にサイクルすることができます。