【问题标题】:SCP issue with multiple files - UNIX多个文件的 SCP 问题 - UNIX
【发布时间】:2018-09-04 03:26:19
【问题描述】:

复制多个文件时出错。以下命令仅复制第一个文件并为其余文件提供错误。谁能帮帮我。

命令:

scp $host:$(ssh -n $host "find /incoming -mmin -120 -name 2018*") /incoming/

结果:

user@host:~/scripts/OTA$ scp $host:$(ssh -n $host "find /incoming -mmin -120 -name 2018*") /incoming/
Password:
Password:
2018084session_event 100% |**********************************************************************************************************|  9765 KB    00:00
cp: cannot access /incoming/2018084session_event_log.195-10.45.40.9
cp: cannot access /incoming/2018084session_event_log.195-10.45.40.9_2_3

【问题讨论】:

    标签: unix ssh scp


    【解决方案1】:

    您的命令使用命令替换 来生成文件列表。您的假设是 scp 的“源”表示法中有一些魔力,这会导致您的find 命令生成的列表的多个成员被假定为存在于$host 上,而实际上您的命令可能会扩展为某些内容喜欢:

    scp remotehost:/incoming/someoldfile anotheroldfile /incoming
    

    只有第一个文件是从$host 复制的,因为其余文件都不包括路径开头的$host:。在您的 local /incoming 目录中找不到它们,因此出现错误。

    哦,此外,您还没有转义find 命令中的星号,因此2018* 可能会扩展为相关用户登录目录中的多个文件。我无法从这里判断,这取决于您的操作系统和 shell 配置。

    我应该指出,您正在提供另一个经典 Parsing LS 问题的示例。特殊字符会破坏你的命令。通常针对此问题提供的“更好”解决方案往往是使用for 循环,但这并不是您真正想要的。相反,我建议您为您要查找的文件创建一个tar。这样的事情可能会做:

    ssh "$host" "find /incoming -mmin -120 -name 2018\* -exec tar -cf - {} \+" |
    tar -xvf - -C /incoming
    

    这是做什么的?

    • ssh 使用您的条件运行远程 find 命令。
    • find 将文件名列表(不考虑特殊字符)作为选项提供给 tar 命令。
    • tar 命令将其结果发送到标准输出 (-f -)。
    • 然后,该输出通过管道传输到在您的本地计算机上运行的另一个 tar,它会提取流。

    如果您的tar 不支持-C,您可以删除它并在ssh 之前运行cd /incoming,或者您可以使用花括号命令替换该管段: { cd /incoming && tar -xvf -; }

    花括号表示法假定一个类似于 POSIX 的 shell(bash、zsh 等)。如果这就是你所坚持的,那么其余的可能在 csh 中同样适用。

    有限保修:仅限尽力而为。未经动物或电脑测试。您的里程可能会有所不同。可能含有坚果。

    如果这对你不起作用,请一直坚持到它起作用为止。

    【讨论】:

    • 谢谢ghoti!但现在面临另一个问题。 1. 远程服务器上的实际路径是“/export/home/wlsadmin/scripts/OTA/incoming/”,它会在我的本地机器中创建完整的目录结构,并在其中复制文件。 2. 在我的本地机器上,tar 支持 -C 但它仍然没有复制文件。我用了你推荐的替代品。 (花括号命令)
    • 要剥离较长路径的组件,您可能有一个--strip-components tar 选项。检查系统上的手册页。 (我在 FreeBSD、macOS 和 Linux 中看到它。)或者,您可以在 find 之前使用 cd。比如:ssh "$host" "cd /export/.../OTA/incoming && find ./ ...
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2010-12-12
    • 2012-06-28
    • 2014-02-19
    • 2020-06-18
    • 2013-01-17
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多