Macでzipに圧縮できないとき|止まる原因を順に見る
mac zip 圧縮 できないという状態は、ひとつの不具合ではありません。Finderの「圧縮」が何も言わずに終わる、途中で警告が出て止まる、書庫はできたのに相手が開けない。この3つは原因がまったく別で、対処もまったく別です。この記事では、止まる場所を書き込み先・空き容量・中身・受け取り側の4つに分け、どこで手が止まっているのかを名前で特定する順番を整理します。
Finderの「圧縮」が裏で動かしているもの
Finderウインドウやデスクトップで項目をControlキーを押したままクリックし、ショートカットメニューから「圧縮」を選ぶと、macOSに最初から入っているArchive Utilityというアプリが処理を引き受けます。実体は /System/Library/CoreServices/Applications/Archive Utility.app にあり、Dockにもアプリケーションフォルダの一覧にも出てきません。ユーザーが直接起動する設計になっていないので、失敗したときも進捗バーが消えるだけで、何が起きたのかが画面に残りません。この「理由が表示されない」という性質が、切り分けを難しくしている最大の要因です。
できあがる書庫の名前には決まりがあります。
1つの項目を圧縮すると、圧縮ファイルには元の項目の名前に拡張子「.zip」が付いた名前が付けられます。複数の項目を同時に圧縮すると、圧縮ファイルには「アーカイブ.zip」という名前が付けられます。 出典: support.apple.com
ここで押さえておきたいのは、書庫が元の項目と同じ場所に作られることです。デスクトップの項目を圧縮すればデスクトップに、外付けディスクの項目を圧縮すればその外付けディスクに書き込まれます。保存先を選ぶ画面は出てきません。つまり「圧縮できない」の多くは、圧縮そのものの失敗ではなく、その場所に新しいファイルを保存できないという失敗です。
止まる場所は4つに分かれる
原因を探す前に、どこで止まっているかを決めます。順番に見ると無駄が出ません。
- 書き込み先。書庫を保存する場所に書き込む権限がない、またはそのディスクが読み出し専用でマウントされている
- 空き容量。元のファイルを読みながら新しいファイルを同じ場所に書くので、元の容量に近い空きが必要になる
- 中身。選んだ項目の中に、まだ手元に降りてきていないiCloudのファイルや、行き先を失ったシンボリックリンクが混ざっている
- 受け取り側。圧縮は成功していて、相手の環境で開けない。この場合はMac側に問題がない
この4つは症状で区別できます。何も起きずに終わるなら書き込み先か中身、途中まで進んで止まるなら空き容量、相手から「開けない」と言われただけならMac側は正常です。逆に言えば、自分の画面で書庫ができているかどうかを先に確認しないと、直す場所を間違えます。
書き込み先の権限で止まっている場合
ファイルを新しく作る操作は、ファイル自身ではなくその入れ物のフォルダに対する書き込み権限を使います。ここを取り違えると、いくら元ファイルの権限を見ても何も見つかりません。フォルダの権限はターミナルで一行で確認できます。
ls -ld ~/Documents/invoices
drwxr-xr-x 5 admin staff 160 Sep 17 18:00 /Users/admin/Documents/invoices
先頭10文字のうち、2文字目から4文字目が所有者の権限です。rwx と並んでいれば書き込めます。r-x のように w が抜けていれば、そのフォルダに新しいファイルを保存できません。所有者の名前が自分のアカウント名と違う場合も同じ結果になります。他のMacからコピーしてきたフォルダや、バックアップから戻したフォルダで起きやすい状態です。
読み出し専用でマウントされているディスクも同じ症状になります。ディスクイメージを開いたまま中身を圧縮しようとした場合、Windows向けにNTFSでフォーマットされた外付けディスクの場合、どちらもmacOSからは書き込めません。ディスクの書き込み可否は「ディスクユーティリティ」で確認できますが、より早いのは、その場所に空のファイルを1つ作ってみることです。touch が通れば権限は問題なく、原因は別にあると分かります。
エラーの文面も手がかりになります。ターミナルから同じ操作をしたとき、権限が足りないだけなら「Permission denied」と出ます。一方で「Operation not permitted」と出た場合は、権限の文字の上にある別の層、たとえばシステムの保護や、アプリごとのフォルダアクセス許可が止めています。前者は権限を直せば解決し、後者は権限をいくら広げても変わりません。
空き容量で止まっている場合
zipは元のファイルを消さずに、別のファイルを新しく作ります。圧縮率が高い相手であれば必要な空きは小さくて済みますが、すでに圧縮されている動画や写真を集めた場合、書庫の容量は元とほとんど同じになります。10GBのフォルダを圧縮するなら、同じディスクに同じくらいの空きが要ると考えておくのが安全です。
空きは次の1行で分かります。
df -h /
Avail の列が残り容量です。ここが数GBしかない状態で大きなフォルダを圧縮しようとすると、途中まで書いて止まります。中途半端な書庫ファイルが残ることもあり、それを開こうとして「壊れている」と判断してしまうのがよくある回り道です。Apple自身も、開けない書庫に対して容量の確認を最初に挙げています。
.zipファイルを開けない場合は、Macに解凍した項目を保存するための十分な領域があることを確認してください。.zipファイルをほかの人から受け取った場合は、ファイルに問題があることがあります。その人にファイルをもう一度圧縮して再送するよう依頼してください。 出典: support.apple.com
容量が足りない場合、圧縮の前にファイルを削除するより、書庫の保存先を別のディスクに変えたほうが速く済みます。その場合はFinderの「圧縮」ではなく、保存先を指定できるターミナル側の手段に切り替えることになります。
中身で止まっている場合
選んだ項目の中に、Macの中に実体がないファイルが混ざっていると、読み込みの段階で進まなくなります。代表はiCloud Driveの最適化です。「Macのストレージを最適化」が有効なアカウントでは、しばらく開いていないファイルの実体がクラウド側へ移り、手元には目次だけが残ります。Finderの一覧では雲のアイコンが付き、名前も容量も見えるので、見た目では気づきにくい状態です。圧縮には実体が必要なので、先にすべてダウンロードしておく必要があります。
もうひとつは、行き先を失ったシンボリックリンクです。リンク先が削除されていたり、別のディスクにあってそのディスクが外れている場合、圧縮の対象を読み出せません。ls -l で行頭が l になっている項目がリンクで、リンク先が消えている場合はターミナルの表示で判別できます。開発用のフォルダやビルドの成果物を含むフォルダで起きやすい問題です。node_modules のように、中に大量のリンクを抱えるフォルダを丸ごと選んだときは、この形で止まっている可能性を先に疑ったほうが早く済みます。
ネットワーク上の共有フォルダも、同じ「実体が手元にない」側に入ります。共有が切れかけている状態では、読み出しが途中で待ちに入り、進捗バーが止まったまま動かなくなります。この場合はいったん共有を外し、必要なフォルダだけをMacの内蔵ディスクにコピーしてから圧縮するのが確実です。ネットワーク越しに読みながら書庫を作る形は、どのアプリを使っても失敗しやすい手順になります。
逆に、関係がないと分かっていることもあります。ファイルにロックをかけた状態、つまりFinderの情報ウインドウで「ロック」にチェックを入れた状態は、圧縮の妨げにはなりません。ロックは書き換えと削除を止める仕組みで、読み出しは止めないためです。「ロックを外したら直った」という話が出てきたときは、別の操作が同時に効いていた可能性を見たほうが確実です。使用中のファイルについても同様で、開いているアプリがあっても読み出しはできます。
ターミナルで原因を名前で受け取る
Finderの「圧縮」が理由を出さないのに対して、ターミナルの zip と ditto は止まった理由をその場に文字で出します。切り分けの道具としてはこちらのほうが早いので、失敗が続くときは一度こちらで試す価値があります。
zip -r invoices.zip invoices
書き込み先の権限が足りない場合、次のように2行で返ってきます。
zip I/O error: Permission denied
zip error: Could not create output file (ro/test.zip)
書けなかったファイルの名前まで出るので、権限を見る場所が確定します。macOSに入っている zip はInfo-ZIPのZip 3.0で、Appleによる修正が加えられたものです。保存先を別のディスクにしたいときは、書庫のパスを自由に書けるこの形が使えます。
Finderの圧縮に近い形をターミナルで作るなら ditto を使います。
ditto -c -k --sequesterRsrc --keepParent invoices invoices.zip
こちらも失敗すれば ditto: ro/t2.zip: Permission denied のように、失敗したパスと理由を並べて返します。どちらのコマンドでも、成功したかどうかは書庫の中身を unzip -l で一覧して確かめられます。作っただけで中を見ないまま相手に渡すのが、いちばん事故になりやすい手順です。
圧縮はできたのに相手が開けない場合
Mac側は正常なのに相手の環境で問題が出るパターンが2つあります。
1つは、書庫の中に __MACOSX というフォルダと、._ で始まるファイルが並ぶことです。これはmacOSがファイルに付けている追加情報を運ぶための入れ物で、ditto に --sequesterRsrc を付けた形、つまりFinderの圧縮と同じ形で作ると必ず入ります。Macで開く限り目に入りませんが、Windowsで展開すると本体のファイルと並んで見え、相手から「余計なファイルが入っている」と言われます。避けたい場合は、追加情報を運ばない形で固める必要があります。ターミナルの zip -r で作った書庫に __MACOSX は入りません。裏を返せば、Finderのタグなどは相手に届きません。
もう1つは、書庫を保存するディスクの形式による上限です。FAT32でフォーマットされたUSBメモリは、1ファイルあたり4GBを超えるファイルを保存できません。書庫がこの容量を超える見込みなら、USBメモリの上に直接作るのではなく、Macの内蔵ディスクで作ってからコピーするか、分割して渡すことになります。
名前が「アーカイブ.zip」になっているのも、相手の受け取り方に影響します。複数の項目を選んで圧縮するとこの名前になるので、送る前に内容が分かる名前に変えておくほうが確実です。
切り分けを1か所で終えられるかどうか
ここまでの手順を並べ直すと、実際にやっていることは3つだけです。フォルダの権限と空き容量を見る、ターミナルで同じ操作をして理由を文字で受け取る、できた書庫の中身を一覧して確かめる。問題はこの3つが、Finder、ターミナル、もう一度Finderと、別の窓を行き来する形になっていることです。行き来のたびに、いまどのフォルダを見ていたのかを思い出し直す手間が挟まります。
フォルダとターミナルとAIが同じ窓にある形にすると、この行き来がなくなります。左でフォルダを選び、同じ窓の下でそのフォルダに対して ls -ld と df -h を打ち、結果を見ながら次を決められます。何ができるかはできることにまとめてあり、他のファイル管理との違いは他のファイル管理との比較で確認できます。
圧縮が失敗したときに知りたいのは、直す手順そのものより「どこで止まったのか」です。理由が画面に出る場所で操作するというだけで、切り分けにかかる時間はかなり短くなります。費用の目安は料金にまとめ、導入前に多い疑問はよくある質問にまとめています。
よくある質問
Finderの「圧縮」が何も起きずに終わります。まず何を見ればよいですか?
書庫を保存する場所、つまり元の項目が入っているフォルダの書き込み権限を最初に確認します。ターミナルで ls -ld を実行し、所有者の権限に w が付いているかを見てください。読み出し専用でマウントされたディスクや、NTFSの外付けディスクでも同じ症状になります。
圧縮に必要な空き容量はどれくらい見ておけばよいですか?
書庫は元のファイルを削除せずに同じ場所へ新しく作られるため、元の容量に近い空きを見ておくのが安全です。動画や写真のように既に圧縮済みのファイルは、書庫にしてもほとんど小さくなりません。df -h / の Avail 列で残りを確認してください。
ファイルにロックをかけていると圧縮できないのでしょうか?
ロックは書き換えと削除を止める仕組みで、読み出しは止めないため、圧縮の妨げにはなりません。ロックを外して直ったように見える場合は、同時に別の操作が効いていた可能性があります。原因は書き込み先の権限か空き容量か、中身の側を順に確認してください。
Windowsの相手に渡したら余計なフォルダが入っていると言われました。
Finderの圧縮で作った書庫には、macOSがファイルに付けている追加情報を運ぶ __MACOSX フォルダと ._ で始まるファイルが入ります。避けたい場合はターミナルの zip -r で固めてください。ただしFinderのタグなどの情報は相手に届かなくなります。