gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:39 25 4
gpt4 key购买 nike

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

最佳答案

本着与 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 给出所有文件权限等......)

对于更复杂的事情(根据您的要求),我相信您最好使用与任何其他 shell 命令一样使用 lftp 的 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 *";

附言有时 lftp 命令会产生额外的东西,比如“[FEAT negotiation...]”,这可能会破坏脚本。您可能可以通过重复 lftp 命令两次来解决,这样它们第二次就成功了,而无需 lftp 进一步协商。

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

关于linux - 通过 sftp 连接进入最后创建的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com