2つのディレクトリ内の各ファイルを比較するプログラムを修正する

スペースが入ったディレクトリやファイル名があると比較できなかった。
調べたら、スペースが含まれる文字列を1行として扱う方法があった。
このサイトを参考に修正する。

ファイル名: cmp.sh
#!/bin/sh

# compare each file in DIR1 with in DIR2

DIR1=$1
DIR2=$2

echo "cmp '$DIR1' '$DIR2'"

main() {
 if [ ! "$DIR1" -o ! "$DIR2" -o ! -d "$DIR1" -o ! -d "$DIR2" ]; then
  return 1
 fi
 IFS_BACKUP=$IFS
 IFS=$'\n'
 DIR=`pwd`
 cd "$DIR1"
 FILES=`find`
 cd "$DIR"
 for FILE in ${FILES}; do
  if [ -f "$DIR1/$FILE" ]; then
   echo "Comparing '$DIR1/$FILE' with '$DIR2/$FILE'"
   ERR=`cmp "$DIR1/$FILE" "$DIR2/$FILE"`
   if [ $ERR ]; then
    echo " [Alert!] '$DIR2/$FILE' differs from '$DIR1/$FILE'"
   fi
  fi
 done
 IFS=$IFS_BACKUP
 return 0
}

main $@ || exit $?
IFSを一時的に変更して解決した。

使い方は変わらない。
sh ./cmp.sh DIR1 DIR2
2013/03/09 22:23
タグ