Macの隠しファイルを削除してよいか|消すと困る物を見分ける
mac 隠し ファイル 削除で検索する人の多くは、削除のコマンドを知りたいのではなく「これは消しても壊れないのか」が分からずに手が止まっています。隠しファイルと一口に言っても、消しても即座に作り直されるだけのものと、消すとバックアップや検索の索引が壊れるものが同じ場所に並んでいます。この記事では、Macの隠しファイルを4つの種類に分けて、どれを削除してよく、どれは削除ではなく別の手で片付けるべきなのかを切り分けます。
隠しファイルを消したい動機は2つしかない
隠しファイルを消したいという相談は、突き詰めると2つの動機に分かれます。1つは、外付けドライブやZIPを他の人に渡したときに、見慣れない名前のファイルが一緒に届いて相手を混乱させるので消したいというもの。もう1つは、ディスクの空き容量が足りないので、見えていない場所に溜まっている物を削りたいというものです。
この2つは、見た目が同じ「隠しファイルの削除」でも、正解がまったく違います。前者で問題になるのはサイズが数KBしかない管理用のファイルで、消しても空き容量はほとんど動きません。後者で効くのは開発用のキャッシュやライブラリで、こちらは数GB単位になることがあります。
容量の話として隠しファイルに触れた記録には、次のような指摘が残っています。
あ〜っ、納得ですね。隠しフォルダ・ファイルの存在を忘れてた。 最近使ってないライブラリは削除しましょう。 あと上記の画像のようにライブラリフォルダも表示されるので、使ってないものを削除すると良いかと。 特にWeb開発者はnpmやyarnに最近は使ってないライブラリがあるので、容量不足の場合は削除すると良いです 出典: zenn.dev
ここで名前が挙がっているのは、OSが作る管理用のファイルではなく、開発の道具が作ったキャッシュです。自分がどちらの動機で調べているのかを先に決めておくと、読む記事も打つコマンドも変わります。
隠されている物は4つの種類に分かれる
Macで見えなくなっているものは、隠され方の仕組みで4つに分かれます。仕組みが違うので、表示のさせ方も消し方も別です。
1つ目は、名前がドットで始まるファイルです。UNIX系のOSに共通する決まりで、ファイル名の先頭が「.」であればFinderにもlsの既定の一覧にも出てきません。.DS_Storeや、ドットとアンダースコアで始まるファイルがこれに当たります。Finderでファイル名をドットから始めようとすると、次の警告が出て止められます。
「この名前の付いた項目は不可視ファイルとして取り扱われ、表示されなくなってしまいます。」
2つ目は、hiddenという印が付けられているものです。名前は普通でも、ファイルシステム側の旗が立っていると画面に出ません。chflagsコマンドの説明には、この旗の役割が「項目をGUIから隠す」ものとして書かれています。ホームフォルダの中のライブラリフォルダが既定で見えないのは、この仕組みによるものです。
3つ目は、システムが使う領域そのものです。ボリュームの一番上にある.Trashes、.Spotlight-V100、.fseventsdなどは、ゴミ箱と検索の索引とファイル変更の記録を保存するための場所で、OSが自分で管理しています。
4つ目は、隠されているというより、普段は開かない深い場所にあるだけのものです。ライブラリフォルダの下のキャッシュや、開発の道具が作る隠しフォルダは、見つけにくいだけで特別な仕組みで隠れているわけではありません。
表示の切り替えは、画面側と端末側の2つを覚える
削除の前に、対象を目で見られる状態にします。方法は2系統あります。
Finderの上では、ウインドウを開いている状態でcommandとshiftを押しながらピリオドを打つと、ドットで始まる項目の表示が切り替わります。もう一度同じ操作をすれば元に戻ります。一時的に確認したいだけのときは、この切り替えだけで足ります。
ターミナル側では、一覧を出すときにオプションを付けます。
ls -la ~/Documents
aを付けるとドットで始まる項目も並び、lを付けると所有者と許可とサイズが読めます。カレントディレクトリ自身を指す「.」と、1つ上を指す「..」も一緒に出ますが、これはファイルではないので気にしなくてよいものです。
ホームフォルダの中のライブラリフォルダを常に見えるようにしたい場合は、hiddenの旗を外します。
chflags nohidden ~/Library
逆に、自分が作ったフォルダを画面から隠したいときは、nohiddenをhiddenに変えます。この旗はファイル名を変えないので、ターミナルからは今までと同じ名前で扱えます。
.DS_Storeは消すよりも、作らせない側で考える
.DS_StoreはDesktop Services Storeの略で、そのフォルダをFinderでどう表示していたかを覚えておくための小さなファイルです。アイコンの並び、ウインドウの寸法、表示方法などが入っています。消しても、そのフォルダをFinderで開いた時点でまた作られます。
つまり、消すこと自体が目的になりません。効くのは次の2つです。
- 渡す直前に、渡す物の中だけ消す
- そもそも作らせない設定を入れる
渡す直前に消すなら、対象のフォルダを指定して1回で片付けます。
find /path/to/folder -name ".DS_Store" -type f -delete
findの-deleteは、見つけた対象をその場で削除して、常に真を返します。深い階層から順に処理する動きになるため、フォルダの中に残ったファイルを消し忘れる心配はありません。ただし打ち間違いが即座に削除になるので、初回は-deleteを付けずに一覧だけ出して、対象が想定と合っているかを確かめてから消す順番にします。
ネットワーク越しの共有フォルダに.DS_Storeを作らせない設定は、Appleが公開しています。
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
この設定はSMBの共有を見に行くときの動きを変えるもので、適用するには一度ログアウトしてログインし直します。元に戻したいときはTRUEをFALSEにします。手元のディスクに作られる分はこの設定では止まりません。詳しい説明はAppleサポートの該当ページにあります。
ドットとアンダースコアで始まるファイルは、統合で片付ける
.DS_Storeと並んで目に付くのが、元のファイル名の前にドットとアンダースコアが付いた形のファイルです。これはAppleDoubleと呼ばれる形式で、macOS以外の形式のボリュームに書き込むときに、本体に収まらない情報を別のファイルに分けて保存したものです。拡張属性やリソースフォークがここに入ります。
このファイルは、片方だけ消すと情報が落ちます。そのため、削除ではなく本体への統合を先に考えます。macOSにはそのための専用のコマンドが最初から入っています。
dot_clean /Volumes/USBDRIVE
dot_cleanは、指定したフォルダの下を辿って、ドットとアンダースコアで始まるファイルを対応する本体のファイルに統合します。既定では、本体と別ファイルの両方に同じ属性があるとき、新しい方を採用します。本体側を優先したいなら--keep=nativeを、別ファイル側を優先したいなら--keep=dotbarを付けます。
対応する本体が無い、つまり相手が消えて取り残されただけのものを消したいときは、nを付けます。
dot_clean -n /Volumes/USBDRIVE
統合を考えずに全部消してよいと決めているなら、mを付けると常に削除します。この判断は、相手にファイルを渡す直前で、拡張属性を渡す必要がないと分かっているときだけにしてください。
消してよいか迷ったときの判断の目安
名前だけで判断できるものは、先に決めておくと悩む回数が減ります。
| 隠しファイル | 正体 | 削除の判断 |
|---|---|---|
| .DS_Store | Finderの表示設定 | 消してよい。開くと再生成される |
| ._で始まるファイル | 本体から分けられた拡張属性 | dot_cleanで統合してから |
| .Trashes | そのボリュームのゴミ箱 | 消さない。ゴミ箱を空にする操作で減る |
| .Spotlight-V100 | 検索の索引 | 消さない。消すと再作成に時間がかかる |
| .fseventsd | ファイル変更の記録 | 消さない。差分バックアップが全件扱いになる |
| .localized | フォルダ名の表示を切り替える印 | 消さない。標準フォルダの名前表示が変わる |
表の下3つは、消しても即座に困った様子が出ないため「効果があった」と誤解されやすいところです。検索の索引を消すと、しばらくの間はSpotlightの結果が空になり、その再作成のためにディスクとCPUが使われます。ファイル変更の記録を消すと、次回のバックアップが差分ではなく全件の比較になります。どちらも、空き容量のために払う代償としては割に合いません。
用途が分からないものは触らない、というのが唯一安全な線引きです。「古い残骸だろう」という見立ては推測であって、根拠ではありません。
容量のために消すなら、隠しファイルより先に見る場所
空き容量が目的なら、隠しファイルの削除はほぼ空振りになります。.DS_Storeは1つが数KBで、1,000個集めても数MBにしかなりません。効くのは、隠しフォルダの中に積み上がったキャッシュとライブラリです。
見る順番は、大きい方から辿るのが早道です。
du -sh ~/Library/Caches/* | sort -h | tail -20
duは指定した場所が使っている容量を出し、sを付けると中身をまとめた合計に、hを付けると読みやすい単位にします。sortにhを付けると単位付きの数値として並べ替えられるので、末尾の20行が大きい順の上位になります。
ここで上位に来やすいのは、ブラウザのキャッシュ、開発環境が持つ中間生成物、パッケージ管理の道具が残した古いバージョンです。開発の道具が作ったものは、その道具自身に片付けるコマンドが用意されていることが多く、自分でフォルダを消すより安全です。何が入っているか分からないフォルダを、名前が古そうだからという理由で消すのは避けます。
もう1つ見落としやすいのが、外付けドライブの中の.Trashesです。外付けから削除した項目は、ゴミ箱を空にするまでそのドライブの中に残ります。外付けドライブが「消したのに空きが増えない」ときは、まずゴミ箱を空にする操作を試すのが順番です。
調べる窓と打つ窓が分かれていると、確認が抜ける
隠しファイルの削除で事故が起きるのは、コマンドを間違えたときよりも、対象を取り違えたときです。Finderで見ていたフォルダと、ターミナルで打ったパスが別だったという形で起きます。
この確認は3つの情報を突き合わせる作業です。いま選んでいる対象がどこにあるか、その中に何が隠れているか、そして打とうとしているコマンドがどこを指しているか。フォルダを見る窓とコマンドを打つ窓とAIに聞く窓が別々に開いていると、この3つを目で運ぶ回数がそのまま増えます。
フォルダとターミナルとAIが同じ窓にある状態なら、隠しファイルを表示したまま対象を選び、その場所に対してfindを打ち、返ってきた一覧をそのまま読めます。削除の前に一覧だけ出して確かめる手順を、窓を切り替えずに挟めるようになります。
道具の側で何ができるかはできることに整理されています。Finderや他のファイル管理との違いを並べたものは他のファイル管理との比較にあり、外出先のiPhoneから手元のMacに残した作業を確かめる使い方はiPhone・iPadから続きをにまとまっています。費用の目安は料金、判断に迷いやすい点はよくある質問に置かれています。日本語以外の環境で使う場合は対応言語を見てください。
いま変えるべきことは1つです。隠しファイルを消す前に、同じ条件で一覧だけを出す。findに-deleteを付けない1行を先に打つ習慣があれば、削除してよいかの判断は、消したあとではなく消す前に終わります。
よくある質問
.DS_Storeを消すとFinderの表示がおかしくなりますか?
そのフォルダのアイコンの並びや表示方法が既定に戻るだけで、中のファイルには影響しません。次にそのフォルダをFinderで開いた時点で新しい.DS_Storeが作られ、そこから設定を覚え直します。他の人にフォルダを渡す直前に消す使い方であれば、失うものはありません。
._で始まるファイルは全部消してよいですか?
拡張属性が入っているため、本体と切り離して消すと情報が落ちます。先にdot_cleanを本体のあるフォルダに当てて統合し、残ったものを消す順番にしてください。対応する本体が無い取り残しだけを消したい場合は、dot_cleanにnを付けると対象がその分だけに絞られます。
隠しファイルを消せばディスクの空き容量は増えますか?
OSが作る管理用の隠しファイルは1つが数KBなので、まとめて消してもほとんど動きません。効くのはライブラリフォルダの下のキャッシュや、開発の道具が残した古いバージョンです。du -sh で大きい順に並べて、上位から中身を確かめる順番のほうが結果につながります。
.Spotlight-V100や.fseventsdを消しても大丈夫ですか?
消すこと自体はできますが、避けたほうがよい対象です。前者は検索の索引で、消すとしばらくSpotlightの結果が出なくなり、再作成のためにディスクとCPUが使われます。後者はファイル変更の記録で、消すと次のバックアップが差分ではなく全件の比較になります。