スペースが入ったディレクトリやファイル名があると比較できなかった。
調べたら、
スペースが含まれる文字列を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