여러 대의 가상 머신을 연구하고 가상 머신에서 내 로컬 머신으로 일부 파일을 복사하기 위한 다음 스크립트를 생각해냈습니다.
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 및 해당 옵션에 대한 자세한 내용은 리소스를 참조하세요.