8

我需要将多个文件发送到多个位置,但找不到正确的方法。

例如,我需要将file1 发送到location1,将file2 发送到location2。这就是我正在做的事情:

scp file1 file2 root@192.168.1.114:/location1 /location2

但这不起作用。有什么建议吗?

4

5 回答 5

11

无法使用单个scp命令发送到多个远程位置。它可以容纳多个源文件,但只能容纳一个目标。仅使用scp命令本身,它必须运行两次。

scp file1 file2 user@192.168.1.114:/location1 
scp file1 file2 user@192.168.1.114:/location2

可以通过运行 for 循环将其变成“单线”。以 bash 为例:

for REMOTE in "user@192.168.1.114:/location1" "user@192.168.1.114:/location2"; do scp file1 file2 $REMOTE; done

scp仍然运行多次,但循环负责迭代。也就是说,我发现运行一次命令更容易,点击向上箭头(在大多数环境中恢复原始命令),然后更改远程位置并重新发送。

于 2013-07-14T15:38:34.557 回答
4

您可以将您的 scp 命令放在 .sh 文件中,并在一行中使用用户名和密码执行 scp 命令

vim ~/fileForSCP.sh

#!/bin/sh
sshpass -p {password}   scp    file1     root@192.168.1.114:/location1 
sshpass -p {password}   scp    file2     root@192.168.1.114:/location2
sshpass -p {password}   scp    file3     root@192.168.1.114:/location3
...
sshpass -p {password}   scp    file{n}   root@192.168.1.114:/location{n}


接着:

chmod 777 ~/fileForSCP.sh
~/fileForSCP.sh
于 2015-05-31T11:38:50.703 回答
2

你不能用一个scp命令来做到这一点。只需使用scp两次:

scp file1 root@192.168.1.114:/location1
scp file2 root@192.168.1.114:/location2
于 2013-07-14T15:21:49.870 回答
0

例如,您可以使用符号链接构建所需的远程树结构

ln -s file1 目标/位置1/文件1 ...等

在此之后,您可以使用取消引用副本来推送这些文件

rsync -rL 目标 -e ssh user@host:/tmp

于 2013-07-14T15:49:12.673 回答
0

嗨,由于SCP仅针对单个目的地,因此有一个关于此查询的 Hack,但警告您这可能有点幼稚,但可以完成您的工作。在两个 SCP 呼叫之间使用&&接线员

我这样使用它:

scp fileTosend userName1@IPAddress_1:path/to/folder && scp fileToSend userName2@IPAddress_2:path/to/folder

这将同时将数据发送到两个目的地。

于 2016-02-05T08:19:19.510 回答