SFTP mget和get命令将多个文件夹或文件复制到一个服务器目录

SFTP mget和get命令将多个文件夹或文件复制到一个服务器目录

我需要使用一个命令复制同一目录的多个文件夹。所以我首先这样做了

sftp> mget -r folder1 folder2

此命令复制folder1到目标服务器,但将其重命名为folder2.

我可能应该做如下的事情。但是,我没有尝试过

sftp> get -r folder1 && sleep 5 && get -r folder2

我没有尝试这个,但我认为它会起作用。

有没有更好的替代方案?

答案1

mgetsftp 中的子命令是的别名get:

static const struct CMD cmds[] = {
    { "bye",    I_QUIT,     NOARGS  },
    ...
    { "get",    I_GET,      REMOTE  },
    { "mget",   I_GET,      REMOTE  },
    ...
};

get子命令语法为:

 get [-afPpr] remote-path [local-path]

如果您提供getmget多个参数,它将把第二个参数视为第一个参数的重命名目标。因此,您无法一次检索多个目录;你需要单独获取它们:

mget -r folder1 
mget -r folder2

sftp 语法也不允许 shell 样式的命令链接,因此您不能使用如下命令:get -r folder1 && ...。也不需要sleep在 get 命令之间尝试 and ,除非您需要出于其他目的而延迟(本地监视进程,以节省网络几秒钟等)。

作为 的替代方案sftp,请考虑scp

scp -r user@host:folder1 user@host:folder2 /local/directory

...这将递归复制偏僻的 folder1folder2目录到当地的 /local/directory

答案2

如果您的文件夹是folder1 和folder2,则可以使用一个命令获取它们。

get -r folder[1-2]

get [-afPpr] 远程路径 [本地路径]
检索远程路径并将其存储在本地计算机上。如果未指定本地路径名,则其名称与远程计算机上的名称相同。远程路径可能包含全局(7)字符并且可以匹配多个文件。如果是,并且指定了 local-path,则 local-path 必须指定一个目录。

相关内容