![将文件从多个远程计算机复制到本地并为远程计算机创建目录](https://linux22.com/image/190404/%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E5%A4%9A%E4%B8%AA%E8%BF%9C%E7%A8%8B%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%A4%8D%E5%88%B6%E5%88%B0%E6%9C%AC%E5%9C%B0%E5%B9%B6%E4%B8%BA%E8%BF%9C%E7%A8%8B%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95.png)
拥有多个用于学习的虚拟机,并提出了此脚本用于将一些文件从虚拟机复制到我的本地计算机:
SG=rohos; date; for i in `cat /etc/hosts | grep "$SG-" | awk '{print $2}'` ;do echo "Logging into ${i}";ssh -i /root/.ssh/vm_private_key keyless-user@${i} "sudo mkdir -p /tmp/${SG}/${i}; sudo cp /var/some.log /tmp/${SG}/${i}/ ";done
可以在此脚本中更改哪些内容,以便避免多次键入 mkdir 和 cp 的目标目录?或者如果您有更好的工具,例如 rsync 或其他工具,请赐教。
SG=rohos
date
for i in `cat /etc/hosts | grep "$SG-" | awk '{print $2}'`
do
echo "Logging into ${i}"
ssh -i /root/.ssh/vm_private_key keyless-user@${i} "sudo mkdir -p /tmp/${SG}/${i}; sudo cp /var/some.log /tmp/${SG}/${i}/ "
done
答案1
你的脚本不能做你想做的事。正如所写,它只会将远程主机上的文件复制到/tmp/$SG/$i
同一远程主机上。
您需要使用和scp
代替。例如:ssh
cp
SG=rohos
date
for i in $(awk "/$SG-/ {print \$2}" /etc/hosts); do
echo "Logging into $i"
mkdir -p "/tmp/$SG/$i"
scp -i /root/.ssh/vm_private_key "keyless-user@$i:/var/some.log" "/tmp/${SG}/${i}/"
done
如果要保留复制文件的时间戳和权限,请添加-p
到scp
命令的选项。或添加-r
整个目录树的递归副本。
man scp
有关 scp 及其选项的详细信息,请参阅 参考资料。