.DS_Storeや._ファイルを削除したい

Macを使っていると「.DS_Store」やファイルの頭に「._」の付いた隠しファイルが作成されます。このファイルはリソースフォークといって、Mac OS特有のファイル構造でアイコンやウィンドウの形状Finder情報などを持っています。Macで不可視ファイルを見えるようにして、各種の設定などを編集したい時にこれらのファイルが邪魔だったり、Windowsとファイル共有するときにWindowsでも不可視ファイルを見えるようにしていると邪魔なときもあります。
これらのファイルを作成しないようにする設定はないようなので、それ以外の方法をまとめてみました。

.DS_Storeや._ファイルの削除

これらのファイルを必要に応じて削除します。コマンドラインを使ってまとめてさくっと削除します。
削除するコマンド例は以下です。それぞれカレントディレクトリ配下を処理しています。
$ find . -name ".DS_Store" -exec rm -r {} \;
$ find . -name "._*" -exec rm -r {} \;
それぞれファイルを見つけて、見つけたファイルをrmコマンドで削除
$ find . -name ".DS_Store" -print -delete; find . -name "._*" -delete
findコマンドには-deleteオプションがあるのでこれでも同じです。
以下のコマンドを使うとまとめて複数の削除ファイルを指定できる短い方法かと思います。
$ find . \( -name '.DS_Store' -or -name '._*' -or -name 'Thumbs.db' -or -name 'Desktop.ini' \) -delete -print
処理されたファイルを表示したい場合は-printオプションを追加してください。
なんかコマンドがだんだんと長くなってきました。そこで、シェルスクリプトを書いてエイリアスを指定すれば短いコマンドで実行できるので定義します。
以下のファンクションをホームディレクトリ配下の.bashrcに記載しましょう。
function delgomi () {
    find $1 \( -name '.DS_Store' -or -name '._*' -or -name 'Thumbs.db' -or -name 'Desktop.ini' \) -delete -print;
}
alias delgomi=delgomi
これは「delgomi」というエイリアスを定義していて、このエイリアスを叩くと「delgomi」というファンクションが実行されます。コマンド引数を$1で受け取るので、ここでは指定フォルダとなります。例えば、
$ delgomi ./
とコマンドを実行すればカレントディレクトリ配下で上記のコマンドを実行してくれます。
これで「delgomi」コマンドの完成です。
.bashrc編集後は、
source .bashrc
で.bashrcを読み込こんでdelgomiを実行できるようにします。
また、デフォルトではターミナル起動時に.bashrcは自動で読み込まないので、こちらを参考にしてください。

tarコマンドでリソースフォークを含まないように圧縮する

それからMacでtarコマンドを使用するとこのリソースフォークを含んでアーカイブします。Finderやターミナルでは「._」ファイルは見えないので分かりませんが、アーカイブしたファイルを他のOSで解凍すると分かります。
アーカイブにリソースフォークを以下の環境変数を指定してtarコマンドを実行します。
$ COPYFILE_DISABLE=1 tar zcfv sample.tar.gz sample
これで「._」ファイルは含まずにアーカイブできますが、ついでに「.DS_Store」ファイルも除外するために以下のように指定します。
$ COPYFILE_DISABLE=1 tar zcfv sample.tar.gz --exclude='.DS_Store' sample
複数のファイルを指定したい場合は–excludeを複数指定します。
$ COPYFILE_DISABLE=1 tar zcfv sample.tar.gz --exclude='.DS_Store' --exclude='.bash_profile' sample
ディレクトリを除外したい場合は、–exclude=hogeと指定するとhogeフォルダ配下を全て除外します。
$ COPYFILE_DISABLE=1 tar zcfv sample.tar.gz --exclude='.DS_Store' --exclude=hoge sample
これもコマンドが長いので上記と同じようにエイリアス設定しておけば楽にコマンドを実行できます。例えば、
function targz () {
    COPYFILE_DISABLE=1 tar zcfv $1 --exclude='.DS_Store' --exclude=.git $2;
}
alias targz=targz

zipコマンドでリソースフォークを含まないように圧縮する

zipコマンドを使用しても「._」ファイルのリソースフォークを含まないのですが、「.DS_Store」ファイルはある場合は含みます。「.DS_Store」ファイルを除外するには以下のオプションを指定します。
$ zip sample.zip -r sample -x "*.DS_Store"
ただ、zipコマンドはディレクトリの除外指定ができません。

その他

ネットワークドライブやUSBドライブに「.DS_Store」ファイルを作成しないようにするには、以下のコマンドを使います。
ネットワークドライブに.DS_Storeを作らない
defaults write com.apple.desktopservices DSDontWriteNetworkStores -boolean true
USBドライブに.DS_Storeを作らない
defaults write com.apple.desktopservices DSDontWriteUSBStores -boolean true
 それぞれコマンド実効後はFinderを再起動してください。
killall Finder

シェアする