ディレクトリ(フォルダ)比較とシェルの自動生成


過去と現在のディレクトリの比較、および、異なるディレクトリどうしの比較をおこなうツールである。 比較の結果として差分を解消するシェルを出力する。

過去と現在の比較は、複数のメンバが共用しているファイルなどの、日々の更新状況を監視する為に利用できる。

構成

パラメタに指定したディレクトリ以下のファイル及びディレクトリの一覧を再帰的に出力する 「ディレクトリ内ファイル一覧出力」と、ディレクトリ内ファイル一覧を比較する「ファイル一覧比較」 の2種類のPerlスクリプトで構成する。「ファイル一覧比較」は、目的別に作成する。

このWEBサイトは、原稿の文字コードをEUCとし、アップロードする時にJISに変換するようにしている。 つまり、原稿作成用とアップロード用の、構成が同一の2つのディレクトリを持っている。 原稿用ディレクトリで原稿の追加/訂正を行ったあと、原稿用とアップロード用のディレクトリを比較し、差分があれば、 コード変換をしながら、原稿用ディレクトリからアップロード用ディレクトリにファイルをコピーする シェルを「ファイル一覧比較」で出力している。

ディレクトリ内ファイル一覧出力

起動方法

第1パラメタに、走査対象ディレクトリをフルパスで、第2パラメタにファイル一覧を出力するファイルをフルパスで指定する。 Perlスクリプトをdirlist2というファイルに作成した場合の起動例を次に示す。

perl dirlist2 /home/user1/WWW_UPLOAD /tmp/WWW_UPLOAD_DIRLIST

出力結果

コロン2つを各出力項目のセパレータにしている。

第1項目は、ファイルとディレクトリの区分を表しており、 Dはディレクトリ、Fはファイルである。

第2項目は、ファイル名又はディレクトリ名をフルパスで出力している。

第3項目は、更新日付であり、第4項目はサイズ(バイト)である。共にファイルに対してのみ出力する。

ファイル一覧の出力先/tmp/WWW_UPLOAD_LISTへの出力例を次に示す。

D::/home/user1/WWW_UPLOAD/::
D::/home/user1/WWW_UPLOAD/airp/::
D::/home/user1/WWW_UPLOAD/airp/images/::
F::/home/user1/WWW_UPLOAD/airp/images/airp002a.gif::20000305174623::000021927::
F::/home/user1/WWW_UPLOAD/airp/images/airp002a.png::20000305174623::000032618::
F::/home/user1/WWW_UPLOAD/airp/images/airp003.gif::20000305174623::000025185::

Perlスクリプト

付録1参照

ファイル一覧比較

起動方法

第1パラメタと第2パラメタに、比較するファイル一覧をフルパスで指定する。第1パラメタに新しいファイル一覧を 指定し、第2パラメタには古いファイル一覧を出力する。第3パラメタには比較っ結果を出力するファイルをフルパスで 指定する。 Perlスクリプトをcpm2wというファイルに作成した場合の起動例を次に示す。

perl cpm2w /tmp/WWW_EDIT_DIRLIST /tmp/WWW_UPLOAD_DIRLIST /tmp/WWW_CMPLIST

出力結果

実際のところ、編集用とアップロード用ディレクトリの同期合わせ用スクリプトと、FTPパラメタを作成するスクリプト と、単純に変更内容(追加、変更、削除)の区分を出力するスクリプトの3種類を作成して、使用している。 ここでは、その内の同期合わせ用スクリプトの実行結果の例と変更内容区分出力用スクリプトの実行結果を次に示す。

cp     /home/user1/WWW_EDIT/images/pen23.png /home/user1/WWW_UPLOAD/images/pen23.png
nkf -j /home/user1/WWW_EDIT/index.html     > /home/user1/WWW_UPLOAD/index.html   
nkf -j /home/user1/WWW_EDIT/profile.html   > /home/user1/WWW_UPLOAD/profile.html 
nkf -j /home/user1/WWW_EDIT/style.css      > /home/user1/WWW_UPLOAD/style.css    
UPD_F /home/user1/WWW_EDIT/tool/dircomp.html
DEL_F /home/user1/WWW_UPLOAD/tool/dircomp_01.html
ADD_F /home/user1/WWW_EDIT/tool/dircomp_01.txt
DEL_F /home/user1/WWW_UPLOAD/tool/dircomp_02.html
ADD_F /home/user1/WWW_EDIT/tool/dircomp_02.txt
ADD_F /home/user1/WWW_EDIT/tool/dircomp_03.txt

Perlスクリプト

付録2ディレクトリ間同期合わせ用

付録3ディレクトリ変更内容出力用