我需要使用一个命令复制同一目录的多个文件夹。所以我首先这样做了
sftp> mget -r folder1 folder2
此命令复制folder1
到目标服务器,但将其重命名为folder2
.
我可能应该做如下的事情。但是,我没有尝试过
sftp> get -r folder1 && sleep 5 && get -r folder2
我没有尝试这个,但我认为它会起作用。
有没有更好的替代方案?
答案1
mget
sftp 中的子命令是的别名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]
如果您提供get
或mget
多个参数,它将把第二个参数视为第一个参数的重命名目标。因此,您无法一次检索多个目录;你需要单独获取它们:
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
...这将递归复制偏僻的 folder1
和folder2
目录到当地的 /local/directory
。
答案2
如果您的文件夹是folder1 和folder2,则可以使用一个命令获取它们。
get -r folder[1-2]
get [-afPpr] 远程路径 [本地路径]
检索远程路径并将其存储在本地计算机上。如果未指定本地路径名,则其名称与远程计算机上的名称相同。远程路径可能包含全局(7)字符并且可以匹配多个文件。如果是,并且指定了 local-path,则 local-path 必须指定一个目录。