我想复制文件从/到远程服务器在不同的目录。 例如,我想一次运行这4个命令。

scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt

最简单的方法是什么?


当前回答

最简单的方法是

local$ scp remote:{A/1,A/2,B/3,C/4}.txt ./

所以{. .}列表可以包含目录(A,B和C这里是目录;“1.txt”和“2.txt”是这些目录下的文件名)。

虽然它会将所有这四个文件复制到一个本地目录-不确定这是否是你想要的。

在上面的例子中,你会将远程文件A/1.txt, A/2.txt, B/3.txt和C/4.txt复制到一个本地目录,文件名分别为./1.txt, ./2.txt, ./3.txt和./4.txt

其他回答

你可以这样做:

scp hostname@serverNameOrServerIp:/path/to/files/\\{file1,file2,file3\\}.fileExtension ./

这将把所有列出的文件名下载到您所在的本地目录。

确保每个文件名之间不要有空格,只使用逗号。

问题:使用单个SCP命令将多个目录从远程服务器复制到本地计算机,并保留每个目录在远程服务器中的原样。

解决方案:SCP可以很容易地做到这一点。这解决了在对多个文件夹使用SCP时需要多次输入密码的烦人问题。因此,这也节省了很多时间!

e.g.

# copies folders t1, t2, t3 from `test` to your local working directory
# note that there shouldn't be any space in between the folder names;
# we also escape the braces.
# please note the dot at the end of the SCP command

~$ cd ~/working/directory
~$ scp -r username@contact.server.de:/work/datasets/images/test/\{t1,t2,t3\}  .

PS:受到这个伟大答案的激励:scp或sftp用一个命令复制多个文件


根据注释,这在Windows上的Git Bash中也可以正常工作

正如Jiri提到的,可以使用scp -r user@host:/some/remote/path /some/local/path递归地复制文件。这假设有一个目录包含所有您想要传输的文件(没有其他文件)。

但是,如果你想从多个不同的目录传输文件,并且目的地不相同,SFTP提供了一种替代方案:

sftp user@host << EOF
  get /some/remote/path1/file1 /some/local/path1/file1
  get /some/remote/path2/file2 /some/local/path2/file2
  get /some/remote/path3/file3 /some/local/path3/file3
EOF

这里使用“here doc”语法定义一系列SFTP输入命令。作为一种替代方法,您可以将SFTP命令放在一个文本文件中,并执行SFTP user@host -b batchFile.txt

从本地到服务器:

SCP file1.txt file2.sh username@ip.of.server.copyto:~/pathtoupload

从服务器到本地:

scp -T username@ip.of.server.copyfrom:"file1.txt file2.txt" "~/yourpathtocopy"

你可以使用-r开关复制整个目录,所以如果你可以把文件隔离到自己的目录中,你可以一次复制所有的文件。

scp -r ./dir-with-files user@remote-server:upload-path

scp -r user@remote-server:path-to-dir-with-files download-path

例如,

scp -r root@192.168.1.100:/var/log ~/backup-logs

或者如果只有几个,你可以用:

scp 1.txt 2.txt 3.log user@remote-server:upload-path