MSYS の find がアレでいやん

久々の投稿だが色々中途半端ですまん、なネタ。

ダメなのわかってるんだから MSYS なんか使うなよ、ってことでもあるんだけれど、find のパターンマッチングがどうやら全然ダメなことに今更気付いた。

なんで今まで気付かなかったかなんか簡単な話で、「日本語ファイル名なんか嫌いだ」として、何かダウンロードしてきたものですら毎度毎度日本語が含まれないようにリネームしてたからだ。そう、どうやら日本語を含む場合にマッチングが滅茶苦茶らしい。

こういうのがイヤな人はやっぱし cygwin なり msys2 を使うべきだとは思うよ。けど「MSYS のミニマルっぷり」が好みの人にとっては、なかなか捨てられないんよね。

いつものことなんだけれど、MSYS がダメな場合私はどうするかといえば、結局 Python。今回のケースの場合はこんな:

 1 # -*- coding: utf-8 -*-
 2 import os
 3 from fnmatch import fnmatch
 4 
 5 if __name__ == '__main__':
 6     for root, dirs, files in os.walk("."):
 7         for fn in files:
 8             if fnmatch(fn, "*.mka"):
 9                 f = os.path.join(root, fn)
10                 os.remove(f)
11                 print(f)

無論開始ディレクトリとパターンをコマンドラインから取るようにすればもっと汎用になる。それと「完全な find もどき」は書けないことはないと思うが、完全互換のためには argparse モジュールが使えないなど頭抱えることになるので、「世のため人のため」に貢献しようと思う人以外は、私の上の例のように割り切ったほうがよろしい。