特定のディレクトリ間の特定のファイルだけでDiffを取るシェルスクリプト

技術関係

やりたいこと

・特定の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"
タイトルとURLをコピーしました