我需要将多个文件发送到多个位置,但找不到合适的方法。
e.g。我需要将file1发送到location1,将file2发送到location2。这就是我在做的事情:
scp file1 file2 root@192.168.1.114:/location1 /location2
但这不起作用。有什么建议吗?
答案 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
这将同时将数据发送到两个目的地。