通过sftp连接进入最后创建的目录

时间:2012-05-01 14:17:39

标签: linux shell

我已经通过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 本身也不是变量创建。 有任何想法吗 ? 提前致谢

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进一步协商的情况下完成。

希望这有助于走上正轨!欢呼声。