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

最简单的方法是什么?


当前回答

SCP使用SSH进行数据传输,并提供与SSH相同的身份验证和安全性。

这里的最佳实践是实现“SSH密钥和公钥身份验证”。这样,您就可以不用担心身份验证就可以编写脚本。就这么简单。

看看什么是SSH-KEYGEN

其他回答

SCP使用SSH进行数据传输,并提供与SSH相同的身份验证和安全性。

这里的最佳实践是实现“SSH密钥和公钥身份验证”。这样,您就可以不用担心身份验证就可以编写脚本。就这么简单。

看看什么是SSH-KEYGEN

在我的案例中,有太多名称不相关的文件。

我最后用了,

$  for i in $(ssh remote 'ls ~/dir'); do scp remote:~/dir/$i ./$i; done
1.txt                                         100%  322KB   1.2MB/s   00:00
2.txt                                         100%   33KB 460.7KB/s   00:00
3.txt                                         100%   61KB 572.1KB/s   00:00

$

注意:我很抱歉只回答了上面问题的一部分。但是,我发现这些命令对我当前的unix需求很有用。

从本地机器上传特定文件到远程机器:

~/桌面/dump_file $ scp file1.txt file2.txt lab1.cpp等人

从本地机器上传整个目录到远程机器:

~$ scp -r Desktop/dump_files your-user-id@remotemachine.edu:Folder1/DestinationFolderForFiles/

从远程机器下载整个目录到本地机器:

~/Desktop$ scp -r your-user-id@remote.host.edu:Public/web/ Desktop/

复制多个目录:

scp -r dir1 dir2 dir3 admin@127.0.0.1:~/

在玩了一段时间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支持的“{}”语法相比,这个语法是通用的