grep で対象ファイル以外のファイルがヒッNo.08330
レモン さん 14/07/08 14:07
 
【バージョン】 秀丸エディタ 8.40β23 (32bit)
【OS】 Windows 7 Professional (32bit)

いつも便利に使わせて頂いております。
grep 検索のダイアログで「検索するファイル名」を指定したにもかかわら
ず、指定しないファイルがヒットする現象が起きましたのでご報告させて
頂きます。

まず前提として、とあるフォルダに約七千個のテキストファイルがあります。
ファイル名の形式はすべて「年月日(yyyymmdd)時刻(hhmmss).txt」
です。たとえば「20140708091119.txt」という具合です。エンコードは
UTF-8(BOM有)です。

こうした形式のテキストファイルが2006年から今年まで約七千個ありま
す。これらのファイル群から、「ファイル名が 2014 で始まるもの」だけを対
象に grep 検索します。grep のダイアログで「検索するファイル名」のとこ
ろに「2014*.txt」と入力し、任意の検索文字列を入力して実行すると、
2014で始まるファイルに交じってなぜか以下のファイルがヒットしてしまい
ます。

20080913194206.txt
20090715121343.txt

今度は「ファイル名が 2009 で始まるもの」だけを対象にしてみると、検
索結果のウィンドウの一番最後になぜか次のファイルがヒットします。

20110407121902.txt

いつ頃から現象が起きるようになったのかはわかりません。

ちなみに「動作環境」→「grep の動作」では「隠しファイルを除外」と「拡
張子を厳密にチェックする」の二個所だけチェックを入れてあります。

試しに以下のマクロを実行させてみましたか、結果は全く同じでした。

grepdialog2 "", "2014*.txt", "D:\\data\\archive\\diario\\
memo", utf8, nocasesense, regular, outputsingle, hilight;

grep の対象が厳密性に欠けると困りますので、改善して頂ければ助か
ります。

[ ]
RE:08330 追記(オプション等)No.08331
レモン さん 14/07/08 14:22
 
追記です。
「動作環境」→「grep ダイアログ」→「grep のダイアログボックス」は「普
通タイプ」を指定してあります。また、grep ダイアログのオプションでは「正
規表現」と「検索文字列を強調」にだけチェックを入れてあります。エン
コードの判定は「自動判定」、出力先は「単一」です。

[ ]
RE:08331 追記(オプション等)No.08332
秀丸担当 さん 14/07/08 15:57
 

バグ情報ありがとうございます。

ファイル数が多いということで、たぶん8.3ファイル名もあってそれにマッチし
ている可能性が高いと思います。
例えば、以下のような感じで拡張子を除くファイル名が8文字を超える場合、ド
ライブによっては短いファイル名も割り当てられます。

200000xx.txt
200000xx(2).txt
200000xx(3).txt
200000xx(4).txt
   :

8.3ファイル名の様子は、コマンドプロンプトで dir /x とすると確認できます。
この例では以下のような感じになっていました。

             200000xx.txt
201777~1.TXT 200000xx(2).txt
208393~1.TXT 200000xx(3).txt
208E3B~1.TXT 200000xx(4).txt

おそらく8.3ファイル名に起因する問題はWindows95時代からずっとあると思われ
ます。

はっきりとしたルールは不明ですが通常は
200000~1.TXT
200000~2.TXT
200000~3.TXT
と、「~」の後の数字が増えるところ、なぜか最近のエクスプローラで同じファ
イルをCtrl+C,Ctrl+Vで増やしていくと「~」の前の文字が変わる傾向があるよう
です。(たまたまかもしれませんが)

「拡張子を厳密にチェックする」は拡張子だけをチェックしています。
ファイル名部分も厳密にできるようになるべきだと思います。
V8.40はそろそろ正式にしようと考えていますが、できるだけ早い段階で検討し
たいと思います。
正式ですぐやるのはレベルダウンの危険があるので、慎重に考えたいと思います。

現状で対策するとしたら、秀丸エディタだけの対策ではないですが、コマンドプ
ロンプトで、fsutilというコマンドを使って、8.3ファイル名を作らないように
したりすることができるようです。

参考ページ:
http://www.atmarkit.co.jp/fwin2k/win2ktips/1200disable83/disable83.html

[ ]
RE:08332 追記(オプション等)No.08334
レモン さん 14/07/08 16:22
 
いつもながら素早いレスをありがとうございます。
「8.3ファイル名」という問題が関与しているのですね。納得しました。
「8.3ファイル名」を作らないようにする参考ページもご紹介下さりありがと
うございました。さっそく読んでみたところ、fsutil コマンドを使えばよいそう
ですが、既に作成済みのファイル名のエントリからは削除できない由。残
念です。
いつか秀丸エディタがバージョンアップを重ねて、ファイル名部分も厳密に
チェックされる日を待つことに致します。

[ ]
RE:08334 追記(オプション等)No.08335
秀丸担当 さん 14/07/08 17:12
 

既にある8.3ファイル名を削除できないというのは、おそらく@ITの参考ページの
「8.3形式のファイル名の作成を抑止する」の説明のことかと思います。

「Windows 7/Windows Server 2008 R2における8.3形式の名前の削除」の説明で、
削除する方法も書かれているようです。
ただ削除するのはちょっとややこしいことになりそうなので、抑制だけをしてお
くほうが安全で簡単そうです。
抑制して、フォルダごとコピーすれば新しいフォルダには8.3ファイル名はでき
ないようです。
元のフォルダは削除か退避をしておいて、新しいフォルダを元のフォルダ名に名
前を変更すれば、結果的に削除できることになると思います。

[ ]
RE:08335 できました!No.08336
レモン さん 14/07/08 17:52
 
秀丸担当さま

おかげさまでバッチリ解決しました!
アドバイスに従って8.3形式の名前の抑止をしてから新しくフォルダを作り
直し、そこに元のファイルをコピーしたところ、希望通りのgrep検索ができ
ました。
痒い所に手が届く助言をありがとうございました。

[ ]