複数の仮想マシンを研究し、仮想マシンから自分のローカルマシンにいくつかのファイルをコピーするための次のスクリプトを考えました。
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とそのオプションの詳細については、リソースを参照してください。