ZIPファイルから.DS_Store,.__MACOSXを取り除く

macOS

macOSで圧縮ファイル(zip)を作成すると、.__MACOSXディレクトリや .DS_Storeファイルなど macOS上では隠しファイルとなっているものも含まれてしまう場合があります。これらディレクトリやファイルはmacOS固有のモノで、ファイルががあるから、ファイルがないからといって問題が発生するものではありません。Windowsなどでは逆に邪魔に…というか「このファイルは何?」って感じになってしまいます。

なので.__MACOSXディレクトリや .DS_Storeなどを、zip圧縮ファイルから一括削除する方法を説明します。

ちなみに .__MACOSXディレクトリは、ファイルの情報(コメントとか更新日、Finderの情報などのメタデータ)などを保管しているもの。
__MACOSX

.DS_StoreはFinderがそのフォルダのアイコンの位置やフォルダーの設定などの情報が保管されています。
.DS_Store

macOS上で消したい場合

zip圧縮ファイルを作成した後に、zip圧縮ファイルに存在する.__MACOSXディレクトリや .DS_Storeファイルをコマンドを使って一括削除する方法です。

  1. ターミナル アプリを起動する。
    コンソールアプリ

  2. zipコマンドを使って、.__MACOSX.DS_Storeに一致するファイルを圧縮ファイルから削除します。下記では test.zip という圧縮ファイルから取り除いています。

    $ zip --delete test.zip "*__MACOSX*" "*.DS_Store"
  3. bashログインスクリプト(~/.bashrc)に下記のような関数を定義しておくと、関数を呼び出すだけで .__MACOSX.DS_Storeファイルを削除することができるようになります。

    function undot(){
        /usr/bin/zip --delete $@ "*__MACOSX*" "*.DS_Store"
    }
  4. 例として test.zip という圧縮ファイルから、この関数を使って取り除くには下記のように実行します。

    $ undot test.zip

Windows上で消したい場合

macOSで作成されたzip圧縮ファイルから、.__MACOSX.DS_Storeファイルをコマンドを使って一括削除する方法です。

WindowsではmacOSのようなzipコマンドは利用できません。その代わりに7-Zipをインストールして利用しています。今回は64bit版の7-Zipを事前にインストールしているものとします。
コマンドライン版の7-Zipの実行ファイルは7z.exe

今回の説明している方法は、Windows7 Professional 64bit版で行いました。Windows10などそのほかのWindowsでも利用できます。

  1. コマンドプロンプトを起動します(PowerShellでも可能です)。
    コマンドプロンプトを起動する

  2. 7zipのコマンドライン版である、7zコマンドを使って、.__MACOSX.DS_Storeに一致するファイルを圧縮ファイルから削除します。下記では c:¥tempにある test.zipという圧縮ファイルから取り除いています。なお32bit版の7-Zipの場合はc:¥Program Files¥を、c:¥Program Files (x86)¥に置き換えてください。

    C:¥> "c:¥Program Files¥7-Zip¥7z" d c:¥temp¥test.zip "*__MACOSX*" "*.DS_Store" -r
    7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28
    
    Open archive: c:¥temp\¥test.zip
    --
    Path = c:¥temp¥test.zip
    Type = zip
    Physical Size = 1070639
    
    Updating archive: c:¥temp¥test.zip
    
    
    Delete data from archive: 2 folders, 4 files, 6917 bytes (7 KiB)
    Keep old data in archive: 1 folder, 12 files, 1113858 bytes (1088 KiB)
    Add new data to archive: 0 files, 0 bytes
    
    
    Files read from disk: 0
    Archive size: 1068918 bytes (1044 KiB)
    Everything is Ok
  3. バッチファイルを新規に作成(ここではundot.bat)して下記のようなコマンドを記述しておくことで、バッチを呼び出すだけで、.__MACOSX.DS_Storeファイルを削除することができるようになります。なお32bit版の7-Zipの場合はc:¥Program Files¥を、c:¥Program Files (x86)¥に置き換えてください。
    undot.bat

    "c:¥Program Files¥7-Zip¥7z.exe" d %1 "*__MACOSX*" "*.DS_Store" -r
  4. 例として test.zip という圧縮ファイルから、上記で作成したバッチファイル(ここではundot.bat)を使って取り除くには下記のように実行します。

    C:¥> undot.bat test.zip
    C:¥>"c:¥Program Files¥7-Zip¥7z.exe" d test.zip "*__MACOSX
    *" "*.DS_Store" -r
    
    7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28
    
    Open archive: test.zip
    --
    Path = test.zip
    Type = zip
    Physical Size = 1070639
    
    Updating archive: test.zip
    
    
    Delete data from archive: 2 folders, 4 files, 6917 bytes (7 KiB)
    Keep old data in archive: 1 folder, 12 files, 1113858 bytes (1088 KiB)
    Add new data to archive: 0 files, 0 bytes
    
    
    Files read from disk: 0
    Archive size: 1068918 bytes (1044 KiB)
    Everything is Ok