将文件从多个远程计算机复制到本地并为远程计算机创建目录

将文件从多个远程计算机复制到本地并为远程计算机创建目录

拥有多个用于学习的虚拟机,并提出了此脚本用于将一些文件从虚拟机复制到我的本地计算机:

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代替。例如:sshcp

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

如果要保留复制文件的时间戳和权限,请添加-pscp命令的选项。或添加-r整个目录树的递归副本。

man scp有关 scp 及其选项的详细信息,请参阅 参考资料。

相关内容