我已经通过Linux shell脚本打开了与远程服务器的SFTP连接,现在我需要进入目录 / distribution 中最后创建的目录并从中下载文件,代码看起来像:
lftp -u ${sourceEnv},${sourcePass} sftp://${sourceHost}<<EOF
cd $sourceBuildDir/distribution
variable=$(ls -t -r | tail -n 1)
cd $variable
mget *
bye
EOF
但它不能通过SFTP连接工作 ls -t -r | tail -n 1 本身也不是变量创建。 有任何想法吗 ? 提前致谢
答案 0 :(得分:2)
与Marc B的回答一样,我认为你不能在lftp内完成所有这些。 特别是我不认为它支持用户变量......(我应该检查......)
因此,出于某些目的,您可以在lftp脚本中调用从中启动lftp的shell。例如:
# This is a lftp script (like yours)
ls -tr| ! "tail -1|awk '{print $NF}'"
'!'之后的一切传递给unix shell。调用的“尾部”是系统尾部,而不是一些lftp命令。 awk也是如此,我用它来获取dir的名称(lftp的lsp赋予所有文件权限等...)
对于更复杂的事情(按照您的要求)我相信你最好使用一个使用lftp的shell脚本,就像任何其他shell命令一样。你的例子会变成:
# Call lftp to log in and do 'ls', capture the ouput and process it.
sourceBuildDir=$(lftp -c "open ${sourceEnv}:${sourcePass}@${sourceHost}; ls" \
|tail -1|awk '{print $NF}');
echo "I am about to download $sourceBuildDir";
# Call lftp with the processed dir name and do the rest
# (btw. did you consider using the 'mirror' command?)
lftp -c "open ${sourceEnv}:${sourcePass}@${sourceHost}; \
cd $sourceBuildDir/distribution; mget *";
P.S。 有时lftp命令会产生额外的东西,如“[FEAT negotiation ...]”,这可能会破坏脚本。您可以通过重复lftp命令两次来解决,这样第二次成功就可以在没有lftp进一步协商的情况下完成。
希望这有助于走上正轨!欢呼声。