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

ldfqzlk8  于 2023-06-05  发布在  Linux
关注(0)|答案(6)|浏览(1006)

我需要发送多个文件到多个位置,但找不到适当的方式。
例如,我需要将file1发送到location1,将file2发送到location2。这就是我正在做的:

scp file1 file2 root@192.168.1.114:/location1 /location2

但这行不通。有什么建议吗?

sr4lhrrt

sr4lhrrt1#

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

isr3a4wc

isr3a4wc2#

您可以将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
mo49yndu

mo49yndu3#

您不能使用单个scp命令来执行此操作。使用scp两次:

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

pvcm50d14#

例如,您可以使用sym链接构建所需的远程树结构
ln -s file1 target/location1/file1 ...等等
在此之后,您可以使用解引用副本来推送这些文件
rsync -rL target -e ssh user@host:/tmp

ct3nt3jp

ct3nt3jp5#

嗨,有一个关于这个查询的黑客,因为SCP只针对单个目的地,但警告你,这可能有点天真,但可以完成你的工作。在两个SCP呼叫之间使用&&运算符
我这样使用它:

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

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

uyhoqukh

uyhoqukh6#

我也遇到过同样的问题。我通过添加第二部分来解决这个问题,在第二部分中,建立了一个ssh连接,并将文件从/var/tmp移动到它们的目标目录。这是一个有点黑客,但它的工作,如果你把它放在一个bash脚本,它只是一个单一的行

相关问题