macOSの”.DS_Store”を作らない作らせない一括削除したい

公開

macOS の伝統的悪しき慣習、アクセス先のあらゆるフォルダへの” .DS_Store “ファイル撒き散らす問題を、「作らない」・「 一括削除 」・「作らせない」という3つのアプローチで、 macOS 並びにファイル共有を提供するLinux 系サーバやNAS 、Windows Server各プラットフォームにおける対処法をまとめました。

“.DS_Store”とは

macOSのファイルマネージャであるFinderが、ローカル、リモート問わず、アクセスしたフォルダ全てに、表示設定などのメタ情報をその場に書き残すのが、

という小さなファイルです。隠し属性が付与されているので、Finderで隠しファイルを表示するよう設定しない限り、Finder上では目にすることは有りません。さらにmacOS 10.12 Sierra以降は隠しファイルを表示する設定にしても見えないようになりましたが、もちろんターミナルでは表示されます。

macOSのFinderが残すこの小さなファイルに対して嫌悪感を抱いてしまうのは、WindowsやLinuxなどmacOS以外のOSからそのフォルダを開いた時でしょう。アクセスしたネットワーク共有内の全てのフォルダに対して生成されるので、あまり気持ちの良いものではありません(下図は以前、OpenWRTルータGL-AR750Sに挿したSDカードをネットワーク共有フォルダとしたもの)

図01.Ubuntuで開いたSMB共有

図01.Ubuntuで開いたSMB共有

図02.Windowsで開いたSMB共有

図02.Windowsで開いたSMB共有

但し、Windowsの場合はエクスプローラのフォルダオプションで、隠しファイルを非表示にしていれば目にすることもありません。

図03.Windowsのフォルダオプション

図03.Windowsのフォルダオプション

“.DS_Store”を生成しないようにする

ローカルストレージ内はともかく、ネットワークストレージへのアクセス時に、macOSのFinderが .DS_Store を生成しないように設定することは可能です。ターミナルから、次のコマンドでネットワークリソースへの生成を抑制するオプションを有効にし、既存のFinderのプロセスを落としてリロードさせるか、システムへログインし直せば設定は反映されます。

これで今後はネットワーク共有に対して生成されることは無くなりましたが、既に存在する .DS_Store は自分で削除しなくてはなりません。そこでネットワーク共有を提供する各プラットフォームに応じた、一括削除スクリプトを考察してみます。

次のような構造のテストフォルダを用意し、その中にある .DS_Store を再帰的に一括削除することが今回の命題です。

 

macOS・Linux系OSでの一括削除

セキュリティ上の視点から、macOS上の .DS_Store を一括削除する方法とその定期的な実行について、Adobeから次のKBが公開されています。

macOSや一般的なLinuxでは、 find コマンドの -delete オプションを使えば次のように簡単に再帰的な削除が可能です。

OpenWRTなどの組み込み系OSでは、BusyBoxに収められている find コマンドが古いことが多く、 -delete オプションをサポートしていない場合は、AdobeのKBにならい、 find から rm に渡して一括削除できます。

これらのコマンドをcronへ登録して定期実行することで、 .DS_Store を自動削除することができます。

 

Windows上での一括削除:DOS

Windows Serverが提供するネットワーク共有フォルダ内に点在する .DS_Store を一括削除したい場合、MS-DOSでは DEL コマンドにより隠し属性の付いたファイルの再帰的な一括削除が可能です。

 

Windows上での一括削除:PowerShell

PowerShellではいくつかの手法がありますが、例えばこのようにして指定フォルダ以下を一括削除することが可能です。

Windows Serverのタスクスケジューラにこれらのコマンドを登録して定期実行することで、Windows環境での自動削除が実現されます。

 

ここまで .DS-Store をmacOSが作らない、作った .DS_Store の一括削除について考察してきましたが、次のページではネットワークファイル共有側で .DS_Store の作成を拒否する方法を考えてみます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA