我想复制文件从/到远程服务器在不同的目录。 例如,我想一次运行这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

最简单的方法是什么?


当前回答

你可以使用-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

其他回答

你可以使用-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

从本地到服务器:

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

从服务器到本地:

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

serverHomeDir='/home/somepath/ftp/'
backupDirAbsolutePath=${serverHomeDir}'_sqldump_'
backupDbName1='2021-08-27-03-56-somesite-latin2.sql'
backupDbName2='2021-08-27-03-56-somesite-latin1.sql'
backupDbName3='2021-08-27-03-56-somesite-utf8.sql'
backupDbName4='2021-08-27-03-56-somesite-utf8mb4.sql'

scp -i ~/.ssh/id_rsa.pub user@server.domain.com:${backupDirAbsolutePath}/"{$backupDbName1,$backupDbName2,$backupDbName3,$backupDbName4}" .

. -在最后将文件下载到当前目录

我~ / . ssh / id_rsa。Pub -假设您使用.pub密钥建立了服务器的SSH

在玩了一段时间scp之后,我找到了最健壮的解决方案:

(注意单引号和双引号)

本地到远端:

scp -r "FILE1" "FILE2" HOST:'"DIR"'

远程到本地:

scp -r HOST:'"FILE1" "FILE2"' "DIR"

注意,“HOST:”后面的内容将被发送到远程服务器并在那里进行解析。所以我们必须确保它们没有被本地shell处理。这就是使用单引号的原因。双引号用于处理文件名中的空格。

如果所有文件都在同一个目录中,我们可以使用*来匹配它们,例如

scp -r "DIR_IN"/*.txt HOST:'"DIR"'
scp -r HOST:'"DIR_IN"/*.txt' "DIR"

与使用只有某些shell支持的“{}”语法相比,这个语法是通用的

scp -r root@ip-address:/root/dir/ C:\Users\your-name\Downloads\

使用-r可以下载远程服务器的dir目录下的所有文件