Mac使いのzipコマンド入門


久しぶりに Qiita に投稿します!

今回は、Mac でパスワード付きのzipファイルを作成する方法についてまとめます。

環境

macOS Big Sur (Ver11.2.3)

目次

  • zip ってなあに
  • ターミナルを起動しよう
  • 呪文1【zip】コマンドを使って普通に圧縮する
  • 呪文2【zip -e】パスワード付きで圧縮する
  • 呪文3【zip -r】ディレクトリ(フォルダ)ごと圧縮する
  • 呪文4【zip -e -r】パスワード付きでディレクトリ(フォルダ)ごと圧縮する
  • 呪文5【zipcloak】zipファイルにパスワードを後付けする
  • まとめ

zip ってなあに

zip とは、圧縮形式(のひとつ)です。
以下 GMOクラウドアカデミー | zip?rar?様々なファイル圧縮形式を知ろう より抜粋。

1989年にフィル・カッツが開発したもので当初は自宅のキッチンで趣味として開発したといわれています。現在はWindows、Macでは圧縮・解凍機能が標準搭載されるようになり、UnixやLinuxを含むさまざまなプラットフォームで使用されています。

因みにこのフィル・カッツさんという方、Wikipediaによると強硬なアンチWindows派だったらしい。
出典:Wikipedia | フィル・カッツ

また、話は逸れますが、私は調べている中で思いました。
山手線ゲームでzip以外の圧縮形式がお題になったときに、エンジニアならわかって当然と言われてしまったら困る

そういうわけで、私もこれから得意げに言えるように覚えたいところですが、
今回は一旦非常に役立ちそうなリンクを備忘録に載せておきます(いつかまとめたい気持ちはある)。
Qiita | ファイルの圧縮についてまとめ

ターミナルを起動しよう

Launchpad > その他 からターミナルを起動すると次のような表示が出ると思います。

※ 私は Mojave から Catalina, Big Sur と OS をアップデートしてきたのですが、
よくわからないまま放置してデフォルトシェルをbashのままにしているため(怠惰)、
"To update ~~" と表示されます。

terminal
Last login: Sun Aug  8 08:48:50 on console
Restored session: 2021年 7月31日 土曜日 10時12分23秒 JST

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
ComputerName:~ username$ 

そしていよいよ、5つの呪文についてまとめていく!

今回想定する状況

デスクトップに置いてある「testFile.txt」と「testFolder」をzip化するという想定で書きます。

  • testFile.txt: テキストファイル
  • testFolder: testFile1.txt と testFile2.txt の2つのテキストファイルを格納した
    ディレクトリ(フォルダ)

※ 「ディレクトリ」と「フォルダ」は実質同じものみたいです。この記事では併記します。

呪文1 【zip】コマンドを使って普通に圧縮する

まずは、パスワードを付けずにただのzipファイルを作る方法から。

最初に舞台となるデスクトップに移動する必要があるので、cd(change directory)します。

書類の中の「hogehoge」ディレクトリ(フォルダ)に格納されている場合は、Users/username/Documents/hogehoge/... などと適宜変更します。
手打ちでも良いですが、ディレクトリ(フォルダ)をターミナルに直接ドラッグしても入力できます。

※ 1行目 "cd /Users/..." を入力すると、2行目が表示されます。

terminal
ComputerName:~ username$ cd /Users/username/Desktop
ComputerName:Desktop username$

次に、 "zip(半角スペース)ファイルの名前.zip(半角スペース)ファイルの名前.拡張子"
でzip化できます。

terminal
ComputerName:Desktop username$ zip textFile.zip testFile.txt
  adding: testFile.txt (deflated 54%)
ComputerName:Desktop username$ 

因みに、全部全角スペースだと「コマンド見つからないぞ」と怒られるし、
2つ目だけ全角だと「何もzip化するものないじゃないか!」と怒られます。

terminal
ComputerName:Desktop username$ zip textFile.zip testFile.txt
-bash: zip textFile.zip testFile.txt: command not found
ComputerName:Desktop username$ zip textFile.zip testFile.txt

zip error: Nothing to do! (textFile.zip testFile.txt)

呪文2 【zip -e】パスワード付きで圧縮する

続いて、パスワード付きzipファイルを作る方法を見てみます。
先ほど同様にcdしたら、違う呪文を入力してみましょう。

terminal
ComputerName:Desktop username$ zip -e testFile.zip testFile.txt
Enter password: # パスワードを入力
Verify password: # もう一度パスワードを入力
  adding: testFile.txt (deflated 54%)
ComputerName:Desktop username$ 

"zip -e" コマンドを使うと、設定するパスワードの入力を求められます。
zip化すると同時にパスワードを設定できるということです。便利ですね!

呪文3 【zip -r】ディレクトリ(フォルダ)ごと圧縮する

ファイル単品をzip化する方法はわかったけど...
ディレクトリ(フォルダ)ごと圧縮する場面は多いですよね。

3つ目の呪文を見てみます。

terminal
ComputerName:Desktop username$ zip -r testFolder.zip testFolder
  adding: testFolder/ (stored 0%)
  adding: testFolder/testFile2.txt (deflated 54%)
  adding: testFolder/testFile1.txt (deflated 54%)
ComputerName:Desktop username$ 

"zip -r" コマンドでディレクトリ(フォルダ)を圧縮することができます。

呪文4 【zip -e -r】パスワード付きでディレクトリ(フォルダ)ごと圧縮する

ファイル単品をパスワード付きで圧縮する方法は "zip -e" でした。
では、ディレクトリ(フォルダ)をパスワードを付けて圧縮する呪文を見てみます。

terminal
ComputerName:Desktop username$ zip -e -r testFolder.zip testFolder
Enter password: # パスワードを入力
Verify password: # もう一度パスワードを入力
  adding: testFolder/ (stored 0%)
  adding: testFolder/testFile2.txt (deflated 54%)
  adding: testFolder/testFile1.txt (deflated 54%)
ComputerName:Desktop username$ 

"zip -e" と "zip -r" の合わせ技ですね。
因みに、"zip -e -r" でも "zip -r -e" でも同様にできるようです。

呪文5 【zipcloak】zipファイルにパスワードを後付けする

zipファイルに後付けでパスワードを設定する時に使います。

検索してみたらやたら "zipcloak" というコマンドが出てくるけれど、それでやってみると
なぜかパスワードを入力しても解凍できない(ぴえん)という現象に陥ったことのある人は
私だけではないと思います(多分)。

どうやら、"zipcloak" を使うには、zipファイルを作る際に少しコツがいるようでした。

まず、できないパターンをやってみます。
Finder で圧縮してからzipcloakする方法です。
ここでは、"testFolder" をコピーして、副ボタンクリックで選択して圧縮した
"testFolder2.zip" をデスクトップに作成しました。

terminal
ComputerName:Desktop username$ zipcloak testFolder2.zip
Enter password: # パスワードを入力
Verify password: # もう一度パスワードを入力
encrypting: testFolder2/
encrypting: __MACOSX/._testFolder2
zipcloak warning: Local Entry CRC does not match CD: __MACOSX/._testFolder2
encrypting: testFolder2/.DS_Store
# 以下とても長いエラーメッセージなので省略

残念ながら、これだとパスワードを永遠に入力し続けても解凍できない問題が生じます。
では、zipを作成するときに、クリック操作ではなく、呪文1の "zip" コマンドを使って、
ターミナルで圧縮してみます。

terminal
ComputerName:Desktop username$ zip -r testFolder.zip testFolder
  adding: testFolder/ (stored 0%)
  adding: testFolder/.DS_Store (deflated 93%)
  adding: testFolder/testFile2.txt (deflated 54%)
  adding: testFolder/testFile1.txt (deflated 54%)

先ほどと同様に何の変哲もないzipファイルができましたね。
では、このzipファイルにzipcloakを使ってみると...?

terminal
ComputerName:Desktop username$ zipcloak testFolder
Enter password: # パスワードを入力
Verify password: # もう一度パスワードを入力
encrypting: testFolder/
encrypting: testFolder/.DS_Store
encrypting: testFolder/testFile2.txt
encrypting: testFolder/testFile1.txt

なんと、エラーメッセージが出てきません(私は当時歓喜しました)。
ちゃんとパスワード(今回はhogehogeにしてみました)を入力したら解凍できます。

また、zipcloakにはパスワードを解除できるオプション "zip -d" もあります。

terminal
ComputerName:Desktop username$ zipcloak -d testFolder.zip
Enter password: # 設定していたパスワードを入力
decrypting: testFolder/
decrypting: testFolder/.DS_Store
decrypting: testFolder/testFile2.txt
decrypting: testFolder/testFile1.txt

もちろん、これはディレクトリ(フォルダ)ごとの圧縮でない普通のファイルであっても、
ターミナルを使ってzipを作っておけばzipcloakが使えます。

まとめ

普段、"zipcloak" よりは "zip -e" を使いがちですが、備忘録として書いてみました。
いろいろと試行錯誤してみると、調べたときに腑に落ちることも多く、理解度が上がる気がします。
私はまだまだ、特にシェルの知識が不足しているので、もっとターミナルに詳しくなりたいです!

それでは!


参考 (より詳しい説明などは以下のサイトを参照)