使用scp将多个文件发送到多个位置

时间:2013-07-14 15:17:17

标签: linux

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

e.g。我需要将file1发送到location1,将file2发送到location2。这就是我在做的事情:

scp file1 file2 root@192.168.1.114:/location1 /location2

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

5 个答案:

答案 0 :(得分:8)

使用单个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仍然运行多次,但循环负责迭代。也就是说,我发现运行命令一次更容易,点击向上箭头(在大多数环境中恢复原始命令),只需更改远程位置并重新发送即可。

答案 1 :(得分:3)

你可以将你的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

答案 2 :(得分:2)

单个scp命令无法执行此操作。只需使用scp两次:

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

答案 3 :(得分:0)

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

ln -s file1 target / location1 / file1 ......等等。

之后,您可以使用解除引用的副本来推送这些文件

rsync -rL target -e ssh user @ host:/ tmp

答案 4 :(得分:0)

嗨,由于 SCP 仅针对单个目的地,因此有一个黑客可以查询此查询,但警告您这可能有点天真,但可以完成您的工作。 在两个SCP电话

之间使用&&运算符

我这样用:

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

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