メモ:Maildirを転送する

以前もこんなエントリ書いたような気がするけど、、、、

# rsync -nauv --password-file=xxx . remoteserver:パス

とかは実行できるのに、どうしたことか、コマンドラインから実行される下記のようなbashの1行スクリプトの中ではrsyncの--passord-fileのオプションが効かないので、expectを使うことになった。引数の扱いが変わるんだっけか?(環境:CentOS4.4 kernelは2.6.9-42.ELsmp)

# awk -F: '{print $6}' /etc/passwd | while read u
do
   if [ -d "$u/Maildir" ]
   then
      echo "$u has mailbox"
      rsync -nauv --password-file=xxx $u remoteserver:$u
   fi
done

以下、expectを使ったbashスクリプト

#!/bin/bash
EXPECT=expectのパス

TMP=`mktemp`

function cleanup() {
   for f in $TMP
   do
     if [ -f "$f" ]
     then
        rm -f $f
     fi
   done
}

trap cleanup EXIT

function sync() {
   echo "set timeout 600" > $TMP
   echo "spawn rsync -auv --delete $u remoteserver:$u" >> $TMP
   echo "expect word" >> $TMP
   echo "send \"パスワード\\n\"" >> $TMP
   echo "expect #" >> $TMP

   $EXPECT -f $TMP
}

awk -F: '{print $6}' /etc/passwd | while read u
do
   if [ -d "$u/Maildir" ]
   then
     echo "$u has mailbox"
     sync
   fi
done