Linux なんかではファイル名の最初がピリオドのファイル、いわゆるドットファイルは隠しファイル扱いとなり、通常の設定ではファイルエクスプローラに表示されなかったりします。
これに対し Windows の隠しファイルはファイル・ディレクトリのメタデータである「属性」として表現されており、ファイル名の先頭がピリオドだとしてもそれ自体が隠しファイルを作ってはくれません。
結果なにが起こるかというと、クロスプラットフォームなアプリケーションがドットファイルだけど隠しファイル属性を持っていないファイルをホームディレクトリ(C:\Users\<username>
)に作りまくって大変なことになります。
これにうんざりしていたのでちゃちゃっと Python でスクリプトを組みました。
使い方
標準ライブラリしか使っていないので Python が導入されていればおおむね使えるはずです。ドットファイルを隠しにしたいフォルダのパスを hoge
として、
python -m dothider hoge
とすることで hoge
に存在しているドットファイルすべてが隠しファイルになります。
隠しファイルを表示する設定にするとこのようになり、ちゃんと存在していることがわかります。
もし戻したいと思ったときも簡単で、
python -m dothider -d hoge
で OK です。ちなみにもとから隠しファイルだったファイルやフォルダには影響ありません。
仕組み
と大層にセクションを設けていますが大したことはしていません。
隠しファイル属性の取得・設定は attrib
コマンドをサブプロセス実行するという力技で解決。しかしこんなこと生で処理中に書きたくなかったので pathlib.WindowsPath
クラスを継承したクラスを作成してこれらをメソッドとして持たせて隠蔽しています。
-d
オプションでの復帰については、隠しファイル属性の設定の際にそのフルパスをテキストファイルに書き出し、あとで利用しているだけです。このテキストファイル自体もドットファイルかつ隠しファイルとして作成され、復帰時に自動で削除されます。複数回隠し処理を実行するとそのときに隠されたファイルだけ追記されるので、あとからドットファイルが増えたときにも安心です。
とここまで書いたけど
最近使いはじめたサードパーティ製のファイルエクスプローラである Files にはドットファイルを隠しファイルと同じように非表示にする設定があるのでこのスクリプト作った意味あんまりなくなっちゃったっていう。