【问题标题】:how to redirect result "!find ..." command to put lftp command如何将结果“!find ...”命令重定向到lftp命令
【发布时间】:2012-08-03 21:43:06
【问题描述】:

我想从 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

还有其他方法吗!?我想使用标准输入输出重定向(管道、标准输入...)。

【问题讨论】:

  • mput 是在 ftp 上请求“多个”文件的典型方式(而不仅仅是 put)。我还没有听说过lftp,如果mput &lt; !find ... 有效,我会感到惊讶,但如果有效,请回复以便我们知道。 source 方法看起来相当不错。为什么要花时间尝试修复有效的东西?生命太短暂了 ;-) 祝你好运。
  • 我同意你的看法! mput&lt; !find ... 也不起作用。让我解释一下我需要什么。我需要将文件(仅文件)从:/local/foo/06012012 /local/foo/06022012 /local/foo/06032012 ... /local/foo/07012012 /local/foo/07022012 /local/foo/07032012 ... /local/foo/08012012 /local/foo/08022012 /local/foo/08032012 ... 上传到:/remote/foo/062012 /remote/foo/072012 /remote/foo/082012lftp 提供mirror -R 命令以递归方式上传,但也上传了整个路径。我只需要将数据文件上传到其他路径。
  • 我认为我无法提供帮助,因为我对 lftp 一无所知。那是 l=linux 吗?在您的问题中添加标签以表明可能会有所帮助您的操作系统。并且,您应该编辑您的问题以包含上述评论中的信息,格式化为对其他读者有用;-) 祝你好运。

标签: linux shell ftp lftp


【解决方案1】:

我已经阅读了整个man lftp(1),似乎您选择的方式实际上是最好的方式

  1. ! 命令不支持与其他命令直接组合,正如您尝试过的put &lt; !find ...
  2. 上传文件的唯一方法是使用putmputmirrormirror 正如您所说,对您没有用处,因为它保留了路径。
  3. putmput 命令不支持以任何方式指定包含要上传的文件列表的文件。

所以,唯一的可能就是你所拥有的:生成脚本并使用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

【讨论】:

  • 您提供的mput 解决方案与我昨天尝试的差不多。关于限制,我尝试使用 > 2000 个文件名,并且成功了。 +1
【解决方案2】:
source -e find ./local -type f \| sed \'s/^\(.*\)$/put \"\1\"/\'

sed 命令用双引号 (") 将 find 的每个输出行括起来,并在前面加上 put。这适用于包含空格和其他一些关键字符的文件名,但对于包含双引号、换行符等的文件名将失败……如果您碰巧在你的文件名。

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

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

【讨论】:

    【解决方案3】:

    如果你知道local 目录的最大深度,你可以像这样使用普通的mput 命令:

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

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 2019-06-06
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2012-03-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多