2011/10/06

【コマンドライン】for …( * ) と dir /s /b の小ネタ

 
ほとんどの人にとってどうでも良いネタ紹介。
 
Windows コマンドラインから、現ディレクトリ以下のファイルを列挙するには
標準コマンドを利用する方法で2通りあります。
 
1つ目は dir コマンドを利用して、linux で言う find . -name '*.java'
再現する場合、
 
dir /s /b *.java
 
とすることで再現ができます。
2つ目は for 構文を利用して検索が出来ます。
 
for /r %i in ( *.java ) do echo %i
 
どちらの方法も、パイプを通して xargs などで渡すことによりファイル検索を
行うことが出来ますね。
 
でこの2つのコマンド どっちが高速か という紹介。
 
 
実はこのコマンド、一目の dir /s /b の方が2倍近く早いんです。
理由は for だと echo off をしない場合出力が2倍になるのもありますが、
echo off をしたとしても…
 
・for コマンドは変数展開を行える為、解析処理にオーバヘッドがある。
echo コマンドを通すため、echo を呼び出すためのオーバヘッドがある。
 
という点もあり、大分遅くなります。
 
ファイルを探索するだけなら dir /s /b の方が実用的と言えるかもしれません。

0 件のコメント:

コメントを投稿