Mac の .DS_Store や ._ から始まるファイルを自動的に消す方法
何が困るの?
Mac で USB メモリや NAS を使っていると .DS_Store ファイルや “._” から始まるファイルが大量にできてしまいます。Mac の Finder から見ているぶんには「不可視」ファイルなので見えないのですが、問題は Windows と共有する時です。Windows からはこれらのファイルは不可視ではないので、ゴミ同然の邪魔なファイルになります。特に “._ほげほげ” ファイルは大量にできる可能性があります。
.DS_Store ファイル
Mac のファインダーが使うファイルで、フォルダーを開いた時のウィンドウの位置などを保持しています。なので Mac で使っている限りは便利っちゃ便利。
ちなみに、そもそも .DS_Store ファイルを作らないようにする設定はあちこちで紹介されています。例えばこちら。
Mac OS X で .DS_Store ファイルを作らせない方法 | ゆめとちぼーとげんじつと
._ほげほげファイル
“._”から始まるファイルは、Mac 内蔵 HDD で使われている HFS+ というフォーマットでは作られません。これは、HFS+ では ._ほげほげに入っている内容(リソースフォークといいます)を対応するファイルの内側にそっと格納しておく機能があるからです。ところが、USB メモリや NAS の場合には通常 FAT32, NTFS, ext4 などの別のフォーマットになっていて、これらのフォーマットではリソースフォークをそっと隠してしまっておく機能がないために、元のファイル名の前に “._” を付けた別ファイルを作ってそこに格納するようになっています。
でも、リソースフォークは昔の名残り、盲腸みたいなもんで使ってるアプリなんて皆無(らしい)なので消しちゃってもよいそうであります。
どうやって消すの?
今回紹介する方法は二通りあります。
簡単だけど有料 – BlueHarvest を使う –
BlueHarvest は自動的に不要な不可視ファイルを消してくれるアプリです。お値段は $14.95(30日間の試用期間あり)。
インストールすると常駐してネットワークディスクと非 Mac ディスクの不要ファイルを消してくれます。下図の設定画面で、「入にする」を選ぶと常駐して監視します。「OS X データをクリーンアップ」を選んで削除するファイルの種類をチェックします。起動時に消すわけではなく、常駐してファイルを監視しながらできたと同時に消すようです。
消した結果はメニューバーから見ることができます。
ちょっと面倒だけど無料 – シェルスクリプトと cron を使う –
ターミナルとか使える方は(ほぼ)同じことが無料でできます。
まずはターミナルを使って消すコマンド
ターミナルを使って次のコマンドを打ち込むと現在のフォルダ以下を再帰的にスキャンして不要なファイルを消去します。ついでなので、Windows の Thumbs.db と Desktop.ini も消すようにしました。
1 |
find . \( -name '.DS_Store' -o -name '._*' -o -name '.apdisk' -o -name 'Thumbs.db' -o -name 'Desktop.ini' \) -delete -print |
対象のフォルダを指定する場合には、find の直後の . を /Volumes/share など NAS をマウントしたパスにすれば OK です。
エイリアスにして使いやすくする
毎回上のコマンドを入力するのは面倒臭いので、bash のエイリアスにしました。
~/.bashrc に下記のエイリアスを登録します。
1 |
function delkasu () { find $1 \( -name '.DS_Store' -o -name '._*' -o -name '.apdisk' -o -name 'Thumbs.db' -o -name 'Desktop.ini' \) -delete -print; } |
引数をともなうエイリアスなので function にしてあります。カスファイルを消すという意味で、”delkasu” というエイリアスになっています。.bashrc を編集したら、
1 |
source ~/.bashrc |
として bash に読み込ませます。(次回からは不要です)
使い方は、
1 |
delkasu /Volumes/share |
のように、delkasu に続いて対象のフォルダを指定するだけです。
定期的に実行されるようにする
せっかくなので、crontab を使って定期的に自動実行されるようにしてみましょう。
まずは、delkasu.sh というシェルスクリプトを用意して、~/delkasu.sh として保存しておきます。
1 2 3 4 |
#!/bin/bash /usr/bin/find /Volumes/private \( -name '.DS_Store' -o -name '._*' -o -name '.apdisk' -o -name 'Thumbs.db' -o -name 'Desktop.ini' \) -delete /usr/bin/find /Volumes/share \( -name '.DS_Store' -o -name '._*' -o -name '.apdisk' -o -name 'Thumbs.db' -o -name 'Desktop.ini' \) -delete |
find の直後の /Volumes/private は僕のところの環境なので、適宜ご自身のパスに変更してください。このシェルスクリプトを cron に登録して自動実行させます。
ターミナルから、
1 |
crontab -e |
と入力して、末尾に
1 |
00 17 * * 0 /bin/bash ~/delkasu.sh |
を追記します。
この設定の意味は「毎週日曜日の午後5時に delkasu.sh を起動する」です。crontab の詳しい書き方は例えばこちらを参考にしてください。