manage files and folders in macの前に決めておく5つの規則
ファイルの整理について書かれた記事のほとんどは、好みの話で終わります。階層は何段までにするか、デスクトップは作業場か置き場か、タグは使うべきか。どれも大事ですが、動いていた仕組みが壊れる原因はそこにありません。壊れるのは、機械の側が想定と違う動きをしたときです。コピーしたはずのファイルが1つ足りない、付けたタグが相手の画面では消えている、画面上は別の名前なのに同じフォルダに置けない。これらは好みの問題ではなく、macOSが強制している規則の結果です。規則を知ると、作る価値のある運用と、いずれ崩れる運用の区別が付きます。
保存先が増えた分だけ、判断の回数が増えている
ファイルの置き場は、この10年で確実に増えました。本体のディスクに加えて、iCloud Drive、業務で使う別のクラウド、外付けのSSD、リポジトリの作業ディレクトリ、AIに渡すために切り出した一時フォルダ。1つのファイルを保存するたびに、置き場の選択が発生します。整理が続かない理由を分類の設計に求めがちですが、実際に時間を奪っているのは1日に何十回と繰り返される、この小さな判断のほうです。
そのうえで、macOSには常に動き続けている前提があります。Finderは終了できないプロセスで、ログインしている間ずっと動いています。つまりFinderの初期値は、そのMacの初期値でもあります。フォルダごとに工夫を重ねるより、全体に効いている規則を先に把握したほうが、結果的に手数は減ります。
規則は大きく3つに分けられます。名前に関する規則、移動と複製に関する規則、ファイルに付随する情報に関する規則です。この3つはどれも、破ったその場ではエラーになりません。半年後に、消えたはずのないものが消えている形で現れます。だからこそ、運用を決める前に把握しておく価値があります。順に見ていきます。
名前に使える文字と、名前がぶつかる条件
Appleの資料は、Finderで付けられる名前の制限をはっきり書いています。数字とほとんどの記号は使えるが、コロンは使えない。ピリオドで始まる名前も付けられない。長さの上限は255文字で、バイト数ではなく文字数です。APFSのボリュームでは日本語255文字の名前が作れて、256文字は拒否されます。英語でも日本語でも上限は同じという意味になります。
このうち、運用の設計に影響するものが2つあります。
- 先頭のピリオドは、装飾ではなく非表示の仕組みです。
.notesという名前を付けた項目はFinderに出ません。Command+Shift+ピリオドを押すまで見えず、多くのアプリの保存ダイアログにも出ません。リポジトリや配布物から受け取ったフォルダが、Finderでは空に見えてターミナルでは中身が並ぶのは、これが理由です。 - コロンの制限を課しているのはFinderであって、ファイルシステムではありません。ターミナルで
touch "a:b.txt"を実行するとファイルは作られます。手で打つ限り遭遇しませんが、スクリプトで名前を組み立てる運用では入り込みます。ローカルでは動いて、書き出しや共有の段階で問題になる種類の名前です。
もっとも見落とされているのは、標準のボリュームが大文字と小文字を区別しないことです。同じフォルダに Foo.txt を作ってから foo.txt を作ると、残るのは1つです。2つにはなりません。大文字小文字を区別する設定のボリュームや、他のOSで作られた書庫の中では両方が共存できるため、それをMacへ展開した瞬間に片方が消えます。README.md と Readme.md を意味の違いとして使う運用は、移動のたびに中身を失う運用です。
もう1つ、名前を見て判断するときの落とし穴があります。Finderには拡張子を隠す設定があり、項目ごとにも切り替えられます。隠した状態では report.pdf と report.numbers がどちらも「report」と表示され、一覧の上では同じ名前が2つ並んでいるように見えます。ターミナル側では拡張子まで含んだ名前が出るため、同じフォルダを見ているのに件数の数え方が食い違う原因になります。名前で管理する運用にするなら、拡張子は隠さない設定に統一しておいたほうが事故が減ります。
「移動」は同じ操作ではない
フォルダをドラッグして別の場所へ置く動作は、見た目には1種類です。実際には、行き先によって中身がまったく違う操作になります。
同じボリューム内の移動は、名前の付け替えです。ファイルの実体は動かないので、ls -i で見えるinode番号は前後で変わりません。所要時間は中身の大きさに関係せず、4KBのテキストでも40GBの動画でも同じです。何もコピーしていないので、途中で終わることもありません。
ボリュームをまたぐ移動は違います。macOSの mv のマニュアルは、rename のシステムコールがファイルシステムをまたげないため、cp と rm で処理すると明記しています。つまり所要時間は容量に比例し、途中で中断すれば移動先に中途半端なファイルが残ります。一覧の上では完成品と区別が付きません。
外付けドライブには、もう1つ別の条件が付きます。
外部ドライブがAPFS、Mac OS拡張、またはexFATとしてフォーマットされていることを確認します。NTFSドライブはMacでは読み取り専用なので、そこにファイルを移動することはできません。 出典: support.apple.com
中断したコピーが厄介なのは、あとから見分けにくいところです。一覧に並ぶ項目には名前も日付も付いており、開けるファイル形式であれば途中まで開けてしまうこともあります。容量の合計を比べる方法も、片方が圧縮に対応した形式だったり、iCloudに置かれた未ダウンロードの項目を含んでいたりすると当てになりません。確実なのは、件数と中身の両方を照らし合わせてから元を消すことです。
ここから導かれる実務上の結論は単純です。大きなもの、取り返しの付かないものをボリュームをまたいで動かすときは、コピー、確認、削除の3つの操作に分けます。1回のドラッグで済ませる習慣が、ケーブルが抜けた瞬間にフォルダを失う事故に変わります。
ファイルに付いている情報は、どこで落ちるか
macOSのファイルは、中身だけでできてはいません。Finderのタグ、Finderのコメント、ダウンロードに付く隔離の印などは、拡張属性としてデータの外側に置かれています。ls -l@ で存在が分かり、xattr -l で一覧できます。タグを付けたファイルには com.apple.metadata:_kMDItemUserTags という属性が現れます。
この情報が残るかどうかは、どの操作を通したかで決まります。
| 操作 | 拡張属性 | 補足 |
|---|---|---|
cp(オプションなし) |
残る | 既定の動作で引き継がれる |
cp -X |
落ちる | 落とすための指定 |
ditto |
残る | Mac固有の情報を運ぶ前提の道具 |
ターミナルの zip と unzip |
落ちる | 往復するとタグは消える |
| Webサービスへのアップロード | 落ちる | 中身のバイト列だけが送られる |
下の2行が、タグ運用の価値を決めています。タグは、そのMacの中にファイルが留まっている間はよく働きます。書庫を1回通すと消え、ブラウザ経由の受け渡しでも消え、共有相手の画面に残る保証もありません。一方でファイル名は、どの経路を通っても残ります。
- 後から必ず必要になる情報(案件名、日付、版)はファイル名に入れる
- いまだけ必要な状態(今週中に確認、差し戻し待ち)はタグに持たせる
- 1年後にタグが残っている前提の分類は作らない
拡張属性は、タグ以外の場面でも動いています。インターネットから受け取ったファイルには com.apple.quarantine という印が付き、初回に開くときの確認はこの印を見て出ています。印はファイルの中身ではなく外側に付いているので、書庫を通したり別の経路で受け渡したりすると外れます。逆に、社内で配ったツールが毎回確認を求めてくる場合は、この印が残ったまま配布されていることになります。ファイルに何が付いているのかを疑ったときは、xattr -l で一覧して確かめるのが早い方法です。
見えているものと、そこにある実体が違う場所
一覧に出ている項目が、そのままディスク上にあるとは限りません。macOSで実体と表示がずれる場所は3つあります。
1つ目はiCloud Driveです。デスクトップと書類をiCloudに置き、ストレージの最適化を有効にしていると、名前とサイズはあるのに中身が手元に無い項目が並びます。検索には出ますが、読み出そうとした時点でダウンロードが始まります。フォルダを端から読むスクリプトを流すと、意図せず大量の通信が発生するのはこのためです。
2つ目はシンボリックリンクです。ln -s で作ったリンクが持っているのは、行き先のパスの文字列だけです。行き先の名前を変えれば、リンクは存在しない名前を指したまま残ります。Finderの「エイリアスを作成」で作られるものは別の仕組みなので、一覧上は似た見た目でも同じものとして扱えません。
3つ目はアクセス権です。読む権限が無いフォルダは、道具によっては「中身が0件」として扱われます。エラーではなく空として報告されるため、バックアップや照合の結果が正常に見えてしまいます。
4つ目として、ゴミ箱の扱いも覚えておくと判断が早くなります。ゴミ箱に入れる操作は、同じボリューム内では移動にすぎません。容量はまったく空かず、外付けドライブから捨てた項目はそのドライブの中に残ります。ドライブを取り外す前に空にしていないと、持ち出した先で容量が足りない理由が分からなくなります。逆に言えば、消したつもりの機密ファイルが取り外したドライブの中に残っている状態でもあります。
いずれも不具合ではありません。共通しているのは、件数を信じる前に、その道具が全部を見られる状態だったかを確かめる必要があるということです。
3つの窓を行き来する時間を数える
ここまでは機械の側の話です。設定では消せない費用がもう1つあり、フォルダとコマンドラインを併用している人にとっては、たいていこちらのほうが大きくなります。
ある程度の量を扱うと、作業はフォルダの一覧、シェル、そしてAIとのやり取りの3つに分かれます。探して選ぶのは一覧、Finderで表現できない操作はシェル、その操作を組み立てるのがAIです。3つは別々の窓で、状態は互いに渡りません。一覧で目視で選んだ14件をシェルに渡す方法は無く、条件式として組み直すことになります。コマンドの結果を一覧で確かめるには、窓を切り替えて再読み込みが要ります。
これは分類の設計ではなく道具の設計の問題です。フォルダ階層を作り直す前に、この往復が1時間に何回起きているかを数えたほうが、効く順番が見えます。フォルダとターミナルとAIが同じ窓にある形の道具は、この往復そのものを無くすために作られています。何ができるのかはできることにまとまっており、既存のファイル管理アプリとの設計の違いは他のファイル管理との比較で確認できます。導入の判断材料としては、機能の数より「1日の往復が何回減るか」で見たほうが外しません。費用の側は料金に一覧があります。
よくある質問
フォルダを別のMacにコピーしたらファイルが1つ減っていました。原因は何ですか?
大文字と小文字だけが違う2つの名前が原因であることが多いです。標準のボリュームは Report.pdf と report.pdf を同じ名前として扱うため、区別するボリュームやLinux上で作られた書庫から持ち込むと片方が上書きされます。コピー元を ls で確認してから作業してください。
Finderで付けたタグは、相手に渡しても残りますか?
残らない経路が多くあります。タグはファイルの外側にある拡張属性なので、cp や ditto によるコピーでは引き継がれますが、ターミナルの zip で圧縮して展開すると消えます。ブラウザからのアップロードでも送られません。残す必要がある情報はファイル名に入れてください。
Macのファイル名は何文字まで付けられますか?
APFSのボリュームで255文字までです。バイト数ではなく文字数で数えるため、日本語でも英語でも上限は同じになります。加えてFinderはコロンを受け付けず、ピリオドで始まる名前も作れません。
大きなフォルダを外付けドライブへ動かすとき、移動とコピーのどちらが安全ですか?
コピーしてから中身を確認し、最後に元を消す3段階が安全です。同じボリューム内の移動は名前の付け替えなので途中で終わりませんが、別のドライブへの移動は内部的にコピーと削除の組み合わせになり、中断すると中途半端なファイルが残ります。