すべての記事

Macでファイルやフォルダを1つずつZIPにする方法

· 10分で読めます

クライアントごとのフォルダが10個あり、それぞれのクライアントには自分の分だけを渡したい。1週間分の録音を1本ずつアップロードしたい。古いプロジェクトを1つずつZIPにして保管したい。ところがFinderでまとめて選んで圧縮を選ぶと、すべてが入ったアーカイブ.zipが1つできるだけです。

短い答え:

  • Finderには、項目ごとにアーカイブを作る方法がありません。1つずつ圧縮するか、このあと紹介する「ターミナル」のループを使います。ループはクイックアクションにもできます。
  • Folia Filesでは、項目を選んで右クリックし、圧縮から項目ごとに個別の下のZIP、7Z、TAR.GZ、TAR.XZのいずれかを選びます。項目ごとに専用のアーカイブが、そのすぐ隣にできます。

Finderの「圧縮」がすること

項目を1つだけ右クリックして“Atlas”を圧縮を選ぶと、その名前のZIPが1つできます。フォルダならAtlas.zip、ファイルならreport.pdf.zipです。複数の項目を選ぶとコマンドは3項目を圧縮(選んだ数に応じて変わります)になり、すべてが同じフォルダのアーカイブ.zipという1つのアーカイブにまとまります。

項目ごとにアーカイブを作る設定はありません。1つずつ圧縮するか、小さなスクリプトに任せるかのどちらかです。

「ターミナル」で項目ごとにZIPにする

macOSにはdittoというコピー用のツールがあり、Finderと同じ形式のZIPアーカイブも作れます。短いループで、フォルダ内の項目ごとに1回ずつ実行します。

  1. 「ターミナル」を開きます(アプリケーション › ユーティリティ)。
  2. cdとスペースを入力し、項目が入っているフォルダを「ターミナル」のウインドウにドラッグして、↩を押します。
  3. 次の行を貼り付けて↩を押します。
for item in ./*; do
  [[ "$item" == *.zip || -e "$item.zip" ]] && continue
  if [[ -d "$item" ]]; then
    ditto -c -k --sequesterRsrc --keepParent "$item" "$item.zip"
  else
    ditto -c -k --sequesterRsrc "$item" "$item.zip"
  fi
done

これでフォルダ内のすべての項目の隣にZIPができます。Atlasフォルダの隣にAtlas.zip、report.pdfの隣にreport.pdf.zipという具合です。フォルダ内のファイルとフォルダはすべてアーカイブになるので、アーカイブしたいものだけが入ったフォルダで実行してください。各部分の役割は次のとおりです。

  • ./*はフォルダ内の項目を順にたどります。名前がピリオドで始まる非表示の項目は含みません。先頭の./は、ハイフンで始まる名前がオプションとして読まれるのを防ぎます。
  • 2行目は、ZIPファイルそのものと、すでにアーカイブがある項目を飛ばします。ループを2回実行しても、作り直したり上書きしたりはしません。
  • フォルダは--keepParent付きでアーカイブするので、展開するとフォルダそのものが戻ります。ファイルは単体でアーカイブします。ファイルに--keepParentを使うと、dittoはそのファイルを、置かれているフォルダと同じ名前のフォルダに入れてしまいます。
  • --sequesterRsrcは、Mac固有のデータをアーカイブ内の__MACOSXフォルダにしまいます。FinderのZIPと同じです。

スペースや日本語を含む名前でも問題ありません。$itemはすべて引用符で囲んであります。

ほかの形式は、macOSのtarコマンドで作れます。if … fiのブロックを次のいずれかの行に置き換え、2行目の.zipも同じ拡張子に変えます。

  • TAR.GZ:tar -czf "$item.tar.gz" "$item"
  • TAR.XZ:tar -cJf "$item.tar.xz" "$item"
  • 7Z:tar --format 7zip -cf "$item.7z" "$item"

Folia Filesを使っているなら、フォルダの背景を右クリックしてターミナルで開くを選ぶと、そのフォルダでターミナルが開くのでcdは要りません。Webサイト版には、パネルの下に開くFolia Filesターミナルもあります(下の画像)。

Folia Filesのパネルの下のターミナルで同じループを実行したところ:Atlas、Design、Webサイトの各フォルダにそれぞれZIPができている

ループをクイックアクションにする

Finderで右クリックするだけで使えるようにするには:

  1. Automatorを開き、ファイル › 新規を選んで、クイックアクションを選び、選択をクリックします。
  2. 上部の行で、ワークフローが受け取る現在の項目:をファイルまたはフォルダに、2つ目のメニューをFinder.appにします。
  3. ライブラリからシェルスクリプトを実行アクションをワークフローにドラッグします。シェルが/bin/zshになっていることを確かめ、入力の引き渡し方法を引数としてにして、テキストを上のループに置き換えます。ただし1行目はfor item in "$@"; do(右クリックした項目)に変えます。
  4. ⌘Sで「個別にZIP圧縮」などの名前を付けて保存します。

これで、Finderでファイルを右クリックするとクイックアクションの下に表示されます。Finder.appに設定したものはほかのアプリのメニューには出てきません。その理由はAutomatorのクイックアクションがFinderにしか出ない理由で説明しています(Webサイト版のFolia Filesでは表示されます)。

Folia Filesでは:圧縮 › 項目ごとに個別

Folia Filesなら、どの表示でも右クリックメニューからできます。

  1. 項目を選びます。⌘を押しながらクリック、⇧を押しながらクリック、またはすべてなら⌘Aです。
  2. そのうちの1つを右クリックし、圧縮にポインタを合わせます。
  3. 上の4つの形式は、Finderと同じく選択したもの全体を1つのアーカイブ(アーカイブ.zip)にします。項目ごとに個別の下にある同じ4つの形式は、項目ごとにアーカイブを1つずつ作ります。この下の部分は、項目を2つ以上選ぶと表示されます。

選択した3つのフォルダの「圧縮」サブメニュー:ZIP、7Z、TAR.GZ、TAR.XZ、その下の「項目ごとに個別」に同じ形式

できあがるもの:

  • 項目ごとに、その隣にアーカイブ。名前は項目と同じで、Atlas.zip、Design.zip…となります。ファイルは名前に拡張子が残り、Finderと同じくNotes.md.zipのようになります。
  • 何も置き換えません。すでにAtlas.zipがあれば、新しいものはAtlas 2.zipになります。
  • 複数のフォルダの項目も。「ツリー」表示なら別々のサブフォルダの項目を選べます。アーカイブはそれぞれの項目の隣にできます。
  • できあがったアーカイブは選択された状態になるので、そのままメールにドラッグしたり、もう一方のパネルで開いているクラウドやサーバのフォルダにドラッグしたりできます。

圧縮は、右クリックメニューのほかのアーカイブ・ファイルツールと並んでいます。詳しくはファイルツールのページをご覧ください。

「操作」で進行を見る、一時停止する、キャンセルする

Folia Filesはアーカイブを一度にではなく1つずつ作ります。複数の圧縮を同時に動かしても、ディスクを奪い合うだけだからです。各アーカイブは、コピーや移動の進行も表示するツールバーのボタン操作に1行ずつ並びます(ウインドウ › 進行中の操作、⌃⌘Oでも開けます)。

  • .zipに圧縮中(または.7z、.tar.gz…)。開始前に測ったサイズにもとづく進行バー、追加中のファイル名、全体のうち済んだ量、速度、残り時間が表示されます。順番待ちのアーカイブには準備中…と表示されます。
  • 一時停止ボタンを押すと、圧縮はその場で止まり、再開でそこから続きます。後に続くアーカイブは待機します。
  • ✕ボタン(キャンセル)でアーカイブを1つ止められます。アーカイブは項目の隣に非表示の名前で書き込まれ、完成してはじめて本来の名前になります。そのため、キャンセルしたアーカイブは何も残さず、書きかけのファイルが完成品に見えることもありません。すでにできたアーカイブは残り、ほかのものはそのまま続きます。

ZIP、7Z、TAR.GZ、TAR.XZのどれにする?

  • ZIPは、MacでもWindowsのPCでも、何もインストールせずにダブルクリックで開けます。クライアントや同僚、相手のコンピュータがわからないときはこれです。
  • 7ZはたいていZIPより小さくなります。特に書類、テキスト、コードで差が出ます。ただし、追加のアプリなしでは開けないコンピュータもあるので、そうしたアプリを持っている相手か、自分用のアーカイブに使いましょう。
  • TAR.GZはLinuxのサーバや開発者の定番です。Unixのアクセス権とシンボリックリンクをそのまま保ちます。
  • TAR.XZは一般にTAR.GZより小さくなりますが、作るのに時間がかかります。

写真、ビデオ、音楽はもともと圧縮されているので、どの形式でもあまり小さくなりません。まとめておくためや送るためにアーカイブにするもので、容量を減らすためではありません。

もう一度開く

Folia Filesでは、ZIP、7Z、TARのアーカイブをダブルクリックすると、パネルの中でフォルダのように読み出し専用で開きます。ここに展開はアーカイブの隣に、次の場所に展開は別のフォルダに展開します。詳しくはMacでZIPを展開せずに中身を見る方法をご覧ください。

まとめ

  • Finder:何を選んでも、選択全体でアーカイブ.zipが1つ。
  • ターミナル:上のdittoのループ、TAR.GZ、TAR.XZ、7Zならtar。同じループをAutomatorのクイックアクションにもできます。
  • Folia Files:右クリックの圧縮 › 項目ごとに個別で形式を選ぶだけ。項目ごとに隣にアーカイブができ、操作で進行を確認でき、キャンセルしても何も残りません。