拥有多个用于学习的虚拟机,并提出了此脚本用于将一些文件从虚拟机复制到我的本地计算机:
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 及其选项的详细信息,请参阅 参考资料。