.DS_Storeを削除するアプリケーションは色々あるのですが、ターミナル上からコマンド一発で削除したい時もありますよね!?
という訳で、少しググってみると、カレントディレクトリ以下の不要なファイルを、まとめて削除してくれるコマンドを公開している方がいました。
削除するコマンドは...
find . -name ".DS_Store" -print -exec rm -r {} ";" ; find . -name ._* -exec rm -r {} ";"
です。コレを実行すると、カレントディレクトリ以下の.DS_Storeファイル等が再帰的に削除されます。ちなみに、どの.DS_Storeファイルが削除されたのかも表示されます。実行する時は注意が必要ですが、覚えておくと便利なコマンドだと思います。
参考:
All About [Mac OS Xの使い方] 「メモリカードのメンテナンス」
少し古い情報ですが、詳しい解説があります。
3 件のコメント:
いつも楽しく見させてもらっています。
-name オプションでの正規表現での"*" は "¥" でエスケープするのが正しいのではないかと思います。
% find . -name ._¥* -exec rm -r {} ";"
上記であると "._*" でも結果は同じかもしれませんが...
manual にもそんなことが書いてあるような...
外していたらすみません。
Okawariさん、コメントありがとうございます。
「man find」をして、「-name」の項目を調べると次のような記述があります。
Special shell pattern matching characters (``['', ``]'', ``*'', and ``?'') may be used as part of pattern. These characters may be matched explicitly by escaping them with a backslash (``\'').
ココでは「*」を文字としてではなく、ワイドカードとして使いたいので、バックスラッシュは必要ないと思うのですが、この認識は間違っていますか?もし何か良い情報源などがあれば、是非教えて下さい。
ちなみに、後半部分の「._」を接頭辞に持つファイルに関してですが、コチラに解説があります。最近のMacでは、殆ど利用されないファイルのようです。なので、実際に実行する時は、後半部分を省略しても良いかもしれませんね!
バックスラッシュは通常あったほうがよいと思います。 ._* という部分がシェル (Bash) により解釈される余地を残しておくことになってしまいますので。
空のディレクトリの中で、 "._test0" というファイルと "dir0/._test1" というファイルを作った上で find . -name ._* してみればわかりやすいかと思います。Bash により "._*" という記述が ._test0 に置き換えられた上で find に引数がわたされますので、 ._test1 ファイルが発見できないことになります。
コメントを投稿