我想从 lftp 的 !find 命令的结果中放入文件。
我试过:
$> lftp -u foo, sftp://bar
lftp foo@bar$> put < !find ./local -type f
但是失败了!!
这有效:
$> lftp -u foo, sftp://bar
lftp foo@bar$> !find ./local -type f | awk '{print "put "$1}' > /tmp/files.lftp
lftp foo@bar$> source /tmp/files.lftp
还有别的办法吗!?我想使用 stdio 重定向(管道、stdin...)。
最佳答案
我已经通读了整个man lftp(1)而且看起来您选择的方式实际上是最好的方式。
-
!
命令不支持与其他命令的直接组合,如您所试put < !find ...
- 上传文件的唯一方法是使用
put
,mput
或mirror
.mirror
正如您所说,对您没有用,因为它保留了路径。 -
put
或mput
命令不支持以任何方式指定包含要上传的文件列表的文件。
因此,唯一的可能性就是您所拥有的:生成脚本并使用 source
运行它。
您可以尝试将所有文件放入一个 mput
中命令:
!find ./local -type f | awk -v ORS=" " 'BEGIN{print "mput "}{print}' > /tmp/files.lftp
但要小心:虽然我没有在文档中找到它,但最大行大小可能有限制!所以我认为最终你的方式是最好的方式。
请注意,您还可以将命令编码为:
!find ./local -type f -printf "put %p\n" > /tmp/files.lftp
关于linux - 如何将结果 "!find ..."命令重定向到放置 lftp 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836427/