0

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

4

1 回答 1

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 也是如此,我用它来仅获取目录的名称(lftp 的 ls 提供所有文件权限等......)

对于更复杂的事情(根据您的要求),我相信您最好使用使用 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 *";

PS 有时 lftp 命令会产生额外的东西,例如“[FEAT协商...]”,可能会破坏脚本。您可能可以通过重复两次 lftp 命令来解决,以便第二次成功,而无需 lftp 进一步协商。

希望这有助于走上正轨!干杯。

于 2012-05-01T17:02:53.637 回答