Wednesday, November 4, 2009
シェルスクリプトによる2つのディレクトリ内のHTMLファイルの比較
ちょっとした作業の手違いで、 もとは同じディレクトリをそれぞれ別々にコピーした上で、それぞれで独自に更新してしまった。
2つのディレクトリ(dir_a,dir_b)のそれぞれに追加で作成してしまったhtmlファイルがどれなのかを 探すためのシェルスクリプトを書いたのでメモ。
スクリプト compare-filelist.sh
#!/bin/bash
dir_1=$1
dir_2=$2
for item in $dir_1/*.html
do
htmlfile=`basename $item`
exists=`ls $dir_2 | grep $htmlfile`
echo Check $htmlfile ...
if [ -z $exists ]
then
echo " ->" $htmlfile NOT FOUND
else
echo " ->" $htmlfile found
fi
done
使い方
ディレクトリ構成が 以下のような場合で説明。
- compare-filelist.sh
- dir_a
- 1.html
- 2.html
- 3.html
- 4.html
- dir_b
- 1.html
- 2.html
- 4.html
- 5.html
dir_b の欠落ファイルを探す
dir_a/ にあって dir_b/ にはない(つまり dir_b/ に欠落しているファイル) htmlファイルを探す場合
$ sh compare-filelist.sh dir_a dir_b
Check 1.html ...
-> 1.html found
Check 2.html ...
-> 2.html found
Check 3.html ...
-> 3.html NOT FOUND
Check 4.html ...
-> 4.html found
出力が冗長なので...
$ sh compare-filelist.sh dir_a dir_b | grep "NOT FOUND"
-> 3.html NOT FOUND
dir_a に欠落しているファイルを探す
dir_b/ にあって dir_a にはない(つまり dir_a に欠落しているファイル) htmlファイルを探す場合
$ sh compare-filelist.sh dir_b dir_a | grep "NOT FOUND"
-> 5.html NOT FOUND
わかりやすくするためのMakefile
Makefile
all : chk_dir_a chk_dir_b
chk_dir_a :
@echo "CHK missing files in dir_a ..."
@sh compare-filelist.sh dir_b dir_a | grep NOT
chk_dir_b :
@echo "CHK missing files in dir_b ..."
@sh compare-filelist.sh dir_a dir_b | grep NOT
使い方
$ make
CHK missing file in dir_a ...
-> 5.html NOT FOUND
CHK missing file in dir_b ...
-> 3.html NOT FOUND
