久々の投稿だが色々中途半端ですまん、なネタ。
ダメなのわかってるんだから 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 モジュールが使えないなど頭抱えることになるので、「世のため人のため」に貢献しようと思う人以外は、私の上の例のように割り切ったほうがよろしい。