如何将结果重定向到"!find ..."命令以放置 lftp 命令



我想从的结果中放入文件!从lftp中查找命令。

我试过了:

$> 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…)。

我已经通读了整个人lftp(1),看起来你选择的方式实际上是最好的

  1. !命令不支持与其他命令直接组合,就像您尝试put < !find ...一样
  2. 上传文件的唯一方法是使用putmputmirror。正如您所指出的,mirror对您没有任何用处,因为它保留了路径
  3. putmput命令不支持以任何方式指定带有要上载的文件列表的文件

因此,唯一的可能性是:生成脚本并使用source运行它

您可以尝试将所有文件放入一个mput命令中:

!find ./local -type f | awk -v ORS=" " 'BEGIN{print "mput "}{print}' > /tmp/files.lftp

但要小心:虽然我在文档中没有找到,但最大行大小可能有限制!所以我认为最终你的方式是最好的方式。

请注意,您也可以将高尔夫命令编码为:

!find ./local -type f -printf "put %pn" > /tmp/files.lftp
source -e find ./local -type f | sed 's/^(.*)$/put "1"/'

sed命令用双引号(")包围find的每个输出行,并在put之前加上一个。这将适用于包含空格和其他一些关键字符的文件名,但对于包含双引号、换行符等的文件名将失败。。。如果您的文件名中碰巧有这样的字符,您可以相应地扩展sed执行的替换。

请注意,管道符号(|)前面的反斜杠()、双引号和单引号是lsftp命令行解析器转义解释所必需的。要在类似sh的shell上测试该命令,请使用:

find ./local -type f | sed 's/^(.*)$/put "1"/'

如果您知道local目录的最大深度,您可以使用如下的普通mput命令:

lcd local && mput * */* */*/* */*/*/*

相关内容

  • 没有找到相关文章

最新更新