dotfileをあちこちにコピーする。

dotfileをあるディレクトリにまとめておいて、gitで管理するようにしています。ところが、いまさらですが、あちこちに転送するのがめんどくなったので、shell scriptを書きました。一部awkですが。

HOSTSのところを、scpが認識できるホスト名の羅列にしておきます。dot.cshrcとか、そんな感じでdot.hogeなファイルがカレントディレクトリに複数あるとします。~/.hostsを用意している人は、そこから読み込んでもいいかもしれない。

#!/bin/sh

HOSTS="hoge foo bar"

dotfiles=`ls dot\.*`
dotfiles_truename=`ls dot\.* |awk -F. '{ print substr($0, 4, length($0)) }'|xargs echo`

for df in ${dotfiles_truename}; do
  cp dot${df} ${df}
done

for i in ${HOSTS}; do
  scp ${dotfiles_truename} ${i}:
done

for df in ${dotfiles_truename}; do
  rm -f ${df}
done

scpの起動回数を減らすべく、いったんdotを削ったファイルにコピーしているところが汚いのですが、、、(全部公開鍵認証するようになっているわけではないので、こういうことになっている…)

起動回数を気にしないなら、

#!/bin/sh

HOSTS="hoge foo bar"

dotfiles=`ls dot\.*`
dotfiles_truename=`ls dot\.* |awk -F. '{ print substr($0, 4, length($0)) }'|xargs echo`

for i in ${HOSTS}; do
  for df in ${dotfiles}; do
    df_dotstriped=`echo ${df}|awk -F. '{ print substr($0, 4, length($0)) }|xargs echo`
    scp ${df} ${i}:${df_dotstriped}
  done
done

でしょうか。

awkを使わなくてもできそうですが…