やりたいこと
・特定の2つのディレクトリ間でDiffをとりたい
・ただし、特定の条件のファイルのみで
例えば、tmpファイルや画像などはDiffに含みたくない
やったこと
簡単にシェルスクリプトを作成して対応
使い方の例
カレントディレクトリにファイルやディレクトリが作成されるので、無害なところでやること
作業ディレクトリに移動する
$ cd /path/to/work_dir
後述のシェルスクリプトを動かす
$ ./findiff.sh /path/to/target/A /path/to/target/B
以下のようなファイルが作為されているはず
$ ls
・targetA
・targetB
・diff_log
diff_logのなかに比較した結果が入っている
findiff.sh の中身
・今回対象がWeb系だったのでPHPやなんかを対象にする
・ディレクトリもいらなさそうなものを対象に
$ cat findiff.sh
#!/bin/sh
CURRENT_DIR=`pwd`
TARGET_A=$1
TARGET_A_DIR=$CURRENT_DIR/TARGET_A
TARGET_B=$2
TARGET_B_DIR=$CURRENT_DIR/TARGET_B
INCLUDE_PATTERN=" find ./ -type f -name '*.php' -or -name '*.tmpl' -or -name '*.ctp' -or -name '*.inc' -or -name '*.css' -or -name '*.js' "
EXCLUDE_PATTERN=' xargs grep -l "" | grep -v "temp/" | grep -v "_bk" | grep -v "/_" | grep -v "/\." '
# ディレクトリの存在確認
if [ ! -d $TARGET_A ]; then
echo "$TARGET_A が存在しません" 1>&2
exit;
fi
# ディレクトリの存在確認
if [ ! -d $TARGET_B ]; then
echo "$TARGET_B が存在しません" 1>&2
exit;
fi
echo "過去データの削除"
rm -rf $TARGET_A_DIR
rm -rf $TARGET_B_DIR
echo "TARGET_Aのコピー開始"
cd $TARGET_A
eval $INCLUDE_PATTERN | eval $EXCLUDE_PATTERN | cpio -pdv $TARGET_A_DIR
echo "TARGET_Bのコピー開始"
cd $TARGET_B
eval $INCLUDE_PATTERN | eval $EXCLUDE_PATTERN | cpio -pdv $TARGET_B_DIR
cd $CURRENT_DIR
echo "比較開始"
diff -rbB $TARGET_A_DIR $TARGET_B_DIR > $CURRENT_DIR/diff_log
echo "結果:diff_log"