不要ファイル抜きで同階層のフォルダを一括でzip圧縮する

同一階層フォルダを__MACOSX・.DS_Store抜きで一括圧縮する

macOSのFinderで「右クリック > "xxx"を圧縮」で作成されたzipファイルをWindowsで解凍すると「__MACOSX」や「.DS_Store」という余分なファイルが入っていることがあります。これらをmacOS側で含めないようにする方法を解説していきます。

まずは不要ファイル抜き(__MACOSX・.DS_Store)でzip圧縮するためのターミナルコマンドを確認

デスクトップの「今回圧縮テストする場所」というフォルダ内にある「圧縮対象のフォルダ」をzip圧縮すると仮定したコマンドと結果が以下。

ターミナル(Terminal) の起動方法

Finderから起動 アプリケーション > ユーティリティ > ターミナル.app
Spotlight検索から起動 command(⌘) + スペースキー > 「ターミナル」 > ターミナル.app

ターミナルでコマンドを実行

不要ファイル抜き(__MACOSX・.DS_Store)でzip圧縮するためのターミナルコマンド


# 「cd」で階層を移動して「zip」で圧縮する
cd "~/Desktop/今回圧縮テストする場所/"
zip -r "圧縮対象のフォルダ.zip" "圧縮対象のフォルダ" -x "*.DS_Store" "*__MACOSX*"

このコマンドを使ってわざわざコマンドを打たなくても済む コマンドファイル を作成・実行を簡略化し、さらに複数フォルダも一括で圧縮可能にするようにしてみる。

【準備1. 実行ファイル準備】commandファイルでターミナルのコマンドの実行を簡略化する

commandファイルの仕様の確認

  • commandファイルをダブルクリックで実行するとターミナルが開き、ファイル内に書かれたシェルコマンドが実行される
  • 実行内容はcommandファイルと同階層にあるフォルダを不要ファイル抜き(__MACOSX・.DS_Store)で一括zip圧縮する

↑ 今回はこういう内容のcommandファイルを作ります

commandファイルの準備

下にあるGitHubからファイルをダウンロードするか、コマンドをコピーしてテキストエディタで「*.commnad」ファイルを作成すればok。

[GitHub] shell_compress-folders 同一階層フォルダを.DS_Store抜きで一括圧縮するシェルコマンド
[Download ZIP] 直でファイルをダウンロード

_同一階層フォルダを.DS_Store抜きで一括圧縮する.command


#!/bin/bash

# 変数定義 ##########
# カレントディレクトリ(.commandファイル実行時)
CURRENT=$(cd $(dirname $0);pwd)

# メイン処理 start ##########
# カレントディレクトリへ移動
cd $CURRENT
# ディレクトリ名を配列へ代入
FILE_LIST=(`ls -d */`)
# 配列データ分処理を回す
for FILE in ${FILE_LIST[@]}
do
  # 末尾1文字削除・表示(後方一致除去)
  DIR_NAME=${FILE/%?/}
  # 圧縮コマンド実行
  zip -r "${DIR_NAME}.zip" "${DIR_NAME}" -x "*.DS_Store" "*__MACOSX*"
done
# メイン処理 end ##########

commandファイルの準備が出来たらzip圧縮対象のフォルダのみが同階層に存在する状況を作ります

例)デスクトップ / 今回圧縮テストする場所 / 圧縮対象のフォルダ

【準備2. 実行ファイルの権限変更】commandファイルをダブルクリックして処理開始できるように実行権限を与える

前項で準備したcommandファイルをダブルクリックして実行しようとしても、上図のように「権限無いよ」というメッセージが表示されるはず

commandファイルにアクセス権限を与えるためのコマンド


chmod u+x ファイルパス

そんな時は上記のコマンドをターミナルで実行すればok。

ファイルパスがよくわからない/打つのがめんどくさい時は、「chmod u+x 」までコマンドを打ったあとにターミナルウィンドウ内に対象の.commandファイルをドラッグ&ドロップすればファイルパスが自動で入力できる。

【実行】commandファイルをダブルクリックして処理を走らせる


実行権限のあるcommandファイルをダブルクリックすると上記のようにターミナルが立ち上がり、ファイル内の処理が開始される


実行したフォルダ内を見てみるとzipファイルが作成されている(はず)


解凍してみるとちゃんと中身も入っている(はず)

今回はこれで以上です。macOS同士のみだと余分ファイル削除行為はほぼ意味ないとは思いますがWindows等別OSの方とファイルのやり取りがある方はぜひお試しください。

また、Windows側でのzip解凍時、文字化けが発生する場合はよろしければ以下のページもご参考ください。

【おまけ1】commandファイル実行画面を自動的に閉じる為の設定


commandファイル実行後はこのようなターミナル画面が残った状態になります。これが邪魔な場合は以下の設定を行いましょう。


ターミナル起動後、画面上部メニューの「ターミナル > 環境設定」から「プロファイル > 「シェル」タブ」内に入り、「シェルの終了時: シェルが正常に終了した場合は閉じる」を選択。これでok。

【おまけ2】シェル(shell)の種類について(bash | zsh)

今回のcommandファイルでコマンドを書いていたシェルというプログラムには「bash」と「zsh」という種類があり、「bash = 一般的」「zsh = bashの上位互換」という感じらしい。

違いとしてはコマンド記述の仕方が若干違うくらい…なのかな…?
深く知りたい方はGoogle先生へ質問をどうぞ。

ちなみに macOS Catalina(10.15.7) からターミナルのデフォルトのシェルがzshに変わっているとのこと。
もちろん最新の Big Sur(11.6) もzsh。

自分の macOS がどちらのシェルを使用しているかを確かめるためにはターミナルウィンドウのタイトル部分を見るか下記コマンド実行で確認できる。

ターミナルでシェルの種類を判別するコマンド


# 数字が返ってくればzshを使用中
echo $ZSH_VERSION

# 数字が返ってくればbashを使用中
echo $BASH_VERSION

参考

Share