Index > シェルスクリプトによる2つのディレクトリ内のHTMLファイルの比較
Wed, 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
 Twitter
follow me on Twitter
 Categories