SDFMach (エス ディ エフ マッハ) ■概要 sdf.bat/sdfwin.exeは重複ファイルの検索と削除を行います。 中身が完全に一致するかどうかで重複を判断しています。タイムスタンプやファイル名 は無関係です。 特定の拡張子のファイルだけを検索することもできます。 指定したファイルやフォルダを検索から除外することもできます。 必要に迫られて重複検査ツールをベクターで探して使ってみても、ファイル数が多いと 問題ありだったり、中身を正確に比較しなかったり、複数のディレクトリ間では比較 できなかったりだったのでsdfを作成しました。現在では定番となっているUnDupが ベクターに登録されたのはsdfの作成開始よりも後でした。 そこらのツールには勝ったり負けたりする程度には高速です。 GUIのsdfwinは、sdfのフロントエンドです。sdfを使って内容が一致するファイルを 検出し、削除を行います。 コマンドラインのsdfは内容が一致するファイルを検出します。sdfを使う場合、 ファイルの削除は、sdfで作成されたリストをエディタで編集して削除したいファイル だけのリストを作成してrmfを使って行います。 サイズの一致を検出するためのsdfs、ファイル名の一致を検出するためのsdfnも あります。 UNICODE版はシフトJISで表現出来ないファイル名に対応します。また、2GB超の 仮想メモリ空間に対応する IMAGE_FILE_LARGE_ADDRESS_AWARE フラグを付加して あります。 最初の公開 2002/09/19 最終の更新 2010/10/30 このソフトウェアは無償で提供しています。 13版ではバグ修正をしました。 ■注意事項 このソフトウェアの使用により何らかの問題が発生しても作者は責任を負いません。 代替データストリームには対応していません。ソフトウェアによってはある種の 機能を特に明言することなく代替データストリームを使って実現していることが あります(例 IEでインターネットゾーンからダウンロードしたファイルの警告)。 2,147,483,647バイト(2GB - 1B)を超えるファイルを扱う場合はWindows NT 4.0, 2000,XP,Vista,7上で実行します。 Windows Vista,7ではProgram Files以外のフォルダにインストールする必要があります。 ■インストール方法 ANSI/UNICODEのどちらかのアーカイブファイル中のすべてのEXEファイルとBATファイル を適切なディレクトリに入れます。 ANSI版はWindows 95,98,NT 4.0,2000,XP,Vista,7に対応します。シフトJISで表現出来ない ファイル名は扱えません。 UNICODE版はWindows NT 4.0,2000,XP,Vista,7に対応します。シフトJISで表現出来ない ファイル名も扱えます。 "ヘルプ(&H)"でヘルプを表示したい場合はインストールしたディレクトリにHELP ディレクトリごとHELPのファイルをコピーしてください。たとえば C:\Program Files\SDFにインストールする場合はC:\Program Files\SDFには*.exe *.batなどを置きC:\Program Files\SDF\HELPにHELPのファイルを置いてください。 Windows XP ビジュアル スタイル(Luna)に対応するにはマニフェストファイル sdfwin.exe.manifestをsdfwin.exeと同じディレクトリに置いてください。 検索から除外したいフォルダやファイル名の設定、ファイルの最小サイズ、最大サイズ を保存するようにしたい場合はsdfwin.iniをsdfwin.exeと同じディレクトリに置いて ください。 アンインストールはインストールしたディレクトリのファイルを削除するだけです。 レジストリは地域オプションを参照しています。このソフトウェア独自の設定等には 使用していません。 Windows 95,NT 4.0の場合sdfwin.exeを利用するにはInternet Explorer Version 3.0 以降が必要です。 Windows Vista,7ではProgram Files以下のフォルダにインストールすると動作しません。 それ以外のフォルダにインストールする必要があります。 ■実行方法 検索する sdfwin.exeの場合 1.sdfwinを起動して"フォルダ(&F)"の領域にフォルダを指定します。 2.必要に応じて"プログラム(&P)"の領域をsdf.bat 〜/sdfn.bat 〜等に書き換えます。 3."開始(&S)"します。 sdf.bat、sdfn.bat、sdfs.batの場合 1.インストールしたディレクトリにメモ帳などの適当なエディタでlist.txtを作成 します。 注 UNICODE版の場合はUNICODEでlist.txtを作成する必要があります。 2.コマンドプロンプトを開きます。 3.コマンドプロンプトのカレントドライブ・カレントディレクトリをインストールした ディレクトリにします。 カレントドライブはコマンドプロンプト上で ドライブ名: で変更できます。 カレントディレクトリはコマンドプロンプト上で、 cd 変更したいディレクトリ で変更できます。 カレントドライブ・カレントディレクトリはコマンドプロンプトから cd で確認できます。 4.コマンドプロンプトからsdf.bat、sdfn.bat、sdfs.batのいずれかを実行します。 詳細はSDF.TXTまたはSDFN.TXTを参照してください。 5.dlist.txtに結果が格納されています。メモ帳などの適当なエディタでdlist.txtを 閲覧します。 注 UNICODE版の場合はdlist.txtはUNICODEで作成されます。 削除する sdfwinの場合 結果欄のファイルをチェックして"抹消(&R)"で削除します。 sdfrmut、rmfの場合 1.dlist.txtを元にして、メモ帳などの適当なエディタを使って、インストールした ディレクトリに、削除したいファイルのリストを作成します。 注 UNICODE版の場合はUNICODEでリストを作成する必要があります。 2.コマンドプロンプトを開きます。 3.コマンドプロンプトのカレントドライブ・カレントディレクトリをインストールした ディレクトリにします。 カレントドライブはコマンドプロンプト上で ドライブ名: で変更できます。 カレントディレクトリはコマンドプロンプト上で、 cd 変更したいディレクトリ で変更できます。 カレントドライブ・カレントディレクトリはコマンドプロンプトから cd で確認できます。 4.sdfrmutでリストが正しいかを検証します。 詳細はSDFRMUT.TXTを参照してください。 注 UNICODE版の場合は検証結果はUNICODEで出力されます。 5.rmfでファイルを削除します。 詳細はRMF.TXTを参照してください。 ■再配布条件 すべてのファイルを含む状態での再配布は自由に行ってかいまいません。 アーカイブ方法の変更(たとえばLZHに)を行ってもかまいません。 ソースコードについては下記のソースコード使用条件に従ってください。 ■ソースコード使用条件 zlib-1.2.3.tar.gz (crc32.c crc32.h zlib.h zconf.h zutil.h) zlib-1.2.3.tar.gzに含まれるドキュメントに従ってください。最新版は http://www.zlib.net/ から入手できます。 SDFCK2.EXEでcrc32.obj (crc32.c crc32.h zlib.h zconf.h zutil.h)を使用して います。 *.ico そのままでの他のソフトウェアでの利用はご遠慮願います。 上記以外の *.c *.h *.rc *.bat *.txt *.bmp Makefile 修正BSDライセンスです。 cmpfile.c cmpn.c cmpn.h は公開していません。 ■著作権表示 Copyright (C) 2002-2010 VA007219 zlib README 抜粋 Copyright notice: (C) 1995-2004 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup Gailly and Mark Adler; it does not include third-party code. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. Please read the FAQ for more information on the distribution of modified source versions. ■参考情報 代替データストリーム Windows NT/2000/XPのNTFSではひとつのファイルに複数の内容を含むことができます。 メインストリーム(main data stream)がひとつと代替データストリーム(Alternate Data Streams)が0以上の任意の数です。メインストリームの名前は:$DATAです。 代替データストリームは任意の名前を付けることができます。代替データストリーム を副次ストリームあるいは副ストリームと呼ぶ人もいます。代替データストリームは 「プロパティ」の「概要」、Macintoshのリソースフォークの格納、Windows XP SP2 からはInternet Explorerでファイルをダウンロードしたゾーンの格納等に使われて います。 http://support.microsoft.com/kb/105763/EN-US/ 本ソフトウェアは複数のストリームからなるファイルの場合も、メインストリーム 同士だけを比較して一致を判断します。 リパースポイント(再解析ポイント) リパースポイントへの対応は次のとおりです。 重複検査時にシンボリックリンクやそれ以外のリパースポイントのファイルを除外 することができます。それ以外の点では、シンボリックリンクやリパースポイントの ファイルは通常のファイルとして扱っています。 Vistaのdirコマンドでは/AスイッチでリパースポイントにLを割り当てているので、 sdfwinの結果の属性はシンボリックリンクをYに、それ以外のリパースポイントをLに、 しています。 ディレクトリを展開するときにサブディレクトリがジャンクションやマウントポイント だった場合は属性による除外が可能です。 ジャンクションとマウントポイントはディレクトリに付く属性なのでファイル自体の 属性ではなく、ファイルの場合は専用の関数を使って調べる必要があり、ディレクトリ の場合は専用の関数は必要ありません。現在はその関数を使っていないので、たとえば D:\E\F\G\h.txtというファイルの場合、D:\Eを検索対象にして、展開してD:\E\Fが ジャンクションやマウントポイントだった場合に除外できますが、D:\E\F(やD:\E\F\G) を検索対象にした場合は属性による除外はできません。 D:\E\F\G\h.txtの例だとFがジャンクションやマウントポイントだとあらかじめ わかっているなら除外リストにD:\E\F\を入れておくのがよいです。 ハードリンク ハードリンクはリンクの内容からハードリンクのファイルであることが推定できるよう にしてあります。異なるボリュームのボリュームシリアルナンバーが偶然にも一致して いる場合は異なるファイルがハードリンクのファイルと区別できないことがあります。 スパースファイル スパースファイルは非スパースファイルと同じ処理をしています。 エクスプローラからコマンドプロンプトにフォルダやファイルをドラッグすると そのフルパス名が入力されます。コマンドプロンプトへディレクトリ名を入力する のに使うと便利です。しかしWindows Vistaで仕様が変更されフルパス名の入力が 出来なくなりました。 以下 http://support.microsoft.com/kb/929457 の回避策を引用。 この問題を回避するには、ファイルまたはフォルダのパスをコマンド プロンプト ウィンドウに貼り付けます。これを行うには、次の手順を実行します。 1. エクスプローラを起動し、パスをコピーするファイルまたはフォルダを 見つけます。 2. Shift キーを押しながらそのファイルまたはフォルダを右クリックし、 [パスとしてコピー] をクリックします。 3. コマンド プロンプト ウィンドウ内の任意の場所を右クリックし、[貼り付け] をクリックします。ファイルまたはフォルダのパスがコマンド プロンプトに 貼り付けられます。 注 : Cmd.exe プログラムの簡易編集モードが有効になっている場合、[貼り付け] をクリックする必要はありません。コマンド プロンプト ウィンドウの任意の場所 を右クリックすると、コマンド プロンプトにパスが表示されます。 USB接続のDISKやUSBメモリーでは、同じはずのファイルが不一致と判定されることが 起こるかもしれません。『このソフトウェア以外の比較ツールでは一致と判定される のに』という場合でも、それがUSBデバイスでだけ起こるなら、USBでは正しくデータが 書き込まれていない・読み出されていないという問題であって、このソフトウェアの 問題ではない可能性があります。 一般的な比較ツールはOSのキャッシュを使っています。しかし、このソフトウェアは 高速化のため、OSのキャッシュを使わない設定でファイルの読み出しをしています。 そのため、実際のUSBデバイスにはUSB上のデータ化けのために間違ったデータが 書かれていたとしても、他の比較ツールはOSのキャッシュ上に残っている正しいデータ と内蔵ハードディスクのデータを比較しているだけなのでデータ化けを検出できない ということがありえます。またUSBデバイスやOSのキャッシュ上に残っているデータ は正しいが、ファイルの読み出しをしたときにデータ化けが起こることもありえます。 USBは大量データを扱う場合あまり信用できないようです。著名ソフトウェアの Fire File Copyに関する掲示板では類似の話が繰り返し行われています。 内蔵ハードディスクやLAN経由では、同じはずのファイルが不一致と判定されたことが 無いので、USBの問題が一番疑われます。USB接続のDISKは持っていないのでこの件の 追試はできません。 Fire File Copyの作者さんは 『またファイルをコピーした際、エクスプローラでは問題無いのに、本ソフトでは問題 が生じる(ファイルが壊れる等)場合は、多くの場合、ドライバ側に原因があります。 根本的には、その修正を待たなければなりませんが、WRITEバッファリングモードを 変えると改善する場合がありますので、その場合にも手動設定をお試しください。』 http://www.k3.dion.ne.jp/~kitt/pc/sw/ffc/help/opt.htm#writebuff と言っています。ドライバの問題の可能性もあります。 http://support.microsoft.com/kb/961110 Windows Vista および Windows Server 2008 などの OS において NTFS ファイルシステムでフォーマットされたドライブ上のファイルを更新してクローズした場合、ファイル サイズが正しく表示されない場合がある NTFS ファイルシステムでフォーマットされたドライブ上のファイルを編集してクローズした場合、エクスプローラー、コマンド (CMD.EXE) またはプログラムからランタイムライブラリの _stat() や Win32 API の FindFirstFile() を使用してファイル サイズを確認すると、更新前のファイル サイズが表示されます。また、USN ジャーナルを使用するボリュームでは、本現象の発生する頻度が高くなる場合があります。 SDFを実行する直前まで対象ファイルを編集しているとこの問題により間違った ファイルサイズが報告されるため検索が失敗する場合があります。 12版でこの問題に対応しました。 http://technet.microsoft.com/ja-jp/sysinternals/bb896768(en-us).aspx junction ジャンクション作成ツール