unix で言うところの find は windows では forfiles

unix 系OS で使えるファイル検索ツール find めっちゃ便利、Windows でもこんなのがあればなーなんて思ってましたが普通にありました。知らなかっただけです。

forfiles コマンド。

もうね、ヘルプ画面に載ってる使用法を見ればなにができるか一発でわかる。

 

FORFILES /?
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 was changed 30 days ago"
FORFILES /D 2001/01/01 /C "cmd /c echo @fname is new since Jan 1st 2001"
FORFILES /D +2014/11/7 /C "cmd /c echo @fname is new today"
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

 

※ちなみに、ヘルプ画面内サンプル、今日の日付で処理するところは出力する日によってきちんと日付が変わる。

一週間以上経ったログを捨てるコマンドはこんな感じ。

find の場合

 

find /path -name "*.log" -mtime -7 -exec rm {} \;

 

forfiles の場合

 

forfiles /P C:\PATH /S /M "*.log" /D -7 /C "cmd /c del @path"

 

Windows で腹立つコマンドといえば、find 。これもうホント腹立つ。ファイル検索しようかなーと何気なく find したらこれ低機能 grep やないですか!

じゃあ grep の代替はないのかなー、と思ったら findstr がそれ。検索パターンに正規表現のようなものが使える。よくある正規表現じゃなくて、なんかそれっぽいけどちょっと違うやつが使える。あんまり複雑なことはできなそう。けど無いよりはマシ。