【ターミナル・CLI】macOSで指定したファイルを、パスワードあり・なしでzip形式に圧縮する方法

# 本記事について
完全なる備忘録です。
同じように悩んでいらっしゃる初心者の方の参考になれば良いなと思い書きました。ターミナルの操作に必要な超基礎的なLinuxコマンドの知識を復習したい方や、macOSにおける圧縮方法、暗号化したzipファイルの作成方法がわからない方に少しでも参考になれば嬉しいです。

zipの圧縮・パスワード付与の方法に関しては、海外の質問サイトを参考に記事を書いています。

参考記事は一番下にリンク貼っておきます。

# なぜ書こうと思ったのか
- ターミナルの超基本的な使い方を復習するため
- 直感的に操作方法を理解できる日本語サイトが少なかったため。（Linuxコマンドの勉強不足だと承知しおります。。。）
- web系エンジニアの人気が高くなるにつれて、macOSユーザーが増えること、macOSユーザーの転職活動（に関する書類作成）をする方も非常に多いことから、文書作成ソフトや表計算ソフトなどで書いたもの、その他ファイルなど、企業へ提出する際に「パスワードを付けて送付して欲しい」と企業側からお願いされる場合があると考えたため
- 自分の英語学習のため

個人的な意見ですが、正直ファイルにパスワードを付与したものを送付、その後再度パスワードをメールで送信する行為はセキュリティ面上ほぼ役に立たないと考えています。

# 本題に入る前に、超基本的なLinuxコマンドの復習

ターミナルで操作をする場合は、基本的なLinuxコマンドの操作方法がわからないと躓くかもしれません。そして私自身あまりターミナルの使い方に慣れていないので、備忘録として超基本的なコマンドの復習として書かせていただきます。

<b><i>※pwd, ls, cd等ご存知の方は読み飛ばしていただいて構いません。</i></b>

ディレクトリ＝フォルダ　で考えればコマンドによる動きが視覚的にわかりやすいと思うので、例に合わせてスクショを貼っておきます。


###Linuxコマンド１ 
<b>pwd</b>：カレントディレクトリのパスを確認する（現在いるフォルダまでの道のりを確認する）

```terminal:例1
# カレントディレクトリはapp1

% pwd
/Users/hoge/projects/app1
```

![スクリーンショット 2020-12-08 18.33.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/b17008e7-7218-4348-4719-ef567d174ea2.png)

---

```terminal:例2
# カレントディレクトリはhoge

% pwd
/Users/hoge
```
![スクリーンショット 2020-12-08 18.36.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/3aa64830-56e5-d497-57f8-c09b305a3296.png)

---

```terminal:例3
# カレントディレクトリはapp3

% pwd
/Users/hoge/projects/app3

```

![スクリーンショット 2020-12-08 18.37.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/1b93f48c-a0ce-3a02-3624-2130939f8500.png)

---
---

###Linuxコマンド2
<b>ls</b>：カレントディレクトリの中身を一覧で確認する（フォルダの中に何が入っているか確認する）

```terminal:例1
# カレントディレクトリがprojectsの場合

% ls
app1	app2	app3	app4
```

![スクリーンショット 2020-12-08 18.55.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/f1d9e0d0-b722-9e7b-6349-eb05314aff2c.png)

---

```terminal:例2
# カレントディレクトリがUsersの場合

% ls
fuga	hoge
```
![スクリーンショット 2020-12-08 18.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/ae189cce-e57e-4058-4694-0e61e98e512c.png)

---
---
###Linuxコマンド3
<b>cd</b>：指定したディレクトリへ移動する


```terminal:例1
# projectsからapp4へ移動する（現在のパスは{projects}であると仮定）
% cd app4
```

![スクリーンショット 2020-12-08 19.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/e19fd4b1-92f4-7cfe-d7c0-8855247f7771.png)

---

```terminal:例2
# app4からviewsへ移動する（現在のパスは{app4}で、lsコマンドで次のディレクトリ名を認識していると仮定）
% cd views
```

![スクリーンショット 2020-12-08 19.15.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/34fd8daa-8058-c7c7-f9d7-f50348845d41.png)

---

```terminal
# ルートディレクトリに移動する
% cd /
```

以上Linuxコマンドの基本操作を踏まえて、zipファイルを保存するディレクトリまでターミナルで進みましょう。

# ここから本題
# パスワードなしで圧縮したい場合


今回作成する<b>zipファイル</b>は<b>デスクトップに保存</b>したいと思います。

① zipファイルを保存する場所（ディレクトリ）をターミナルで指定します。

```terminal:terminal
# ルートディレクトリへ移動
% cd /

# Desktopまでの記述
% cd Users/hoge/Desktop

# カレントディレクトリがDesktopであることを確認
% pwd
/Users/hoge/Desktop
```

② 以下のように、生成するzipファイル名、すなわちzip拡張子まで記述します。まだ実行しないでください（生成するzipファイル名は"zipped"とします。任意で変更してください。また、2通りの操作が記述されていますが、必要に応じて操作方法を選んでください。）

```terminal:terminal
# 複数のファイルをzipしたい場合はこの記述です（今回はこちらで行っていきます）
% zip -r -j zipped.zip

# 1つのファイルだけをzipしたい場合はこの記述です（以降の手順は変わりません）
% zip -j zipped.zip
```

③ ②の記述の状態で、zipにしたいフォルダをTerminalへドラッグ＆ドロップ後、実行してください。
![nopass.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/40e4b533-f255-3adc-3b8b-83ba85ac40ea.gif)

④ 今回の場合、Desktopにzipファイルが保存されていれば成功です。

![スクリーンショット 2020-12-08 22.52.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/9aaa5942-986a-0901-3d69-5943f25b370e.png)

中身はこんな感じで、zippedフォルダを開くとすぐに中身が入っています。
![スクリーンショット 2020-12-08 22.53.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/527b8e51-5ce6-c164-05b0-69a843db1ebe.png)

# パスワードありで圧縮したい場合


パスワード、すなわち暗号化したzipファイルを作成するには、<em><b>「パスワードなし」の手順②の記述を変えるだけです！</b><em>

ではどこを変えるのでしょうか

```terminal
# 下記のように記述してください
% zip -r -j -e zipped.zip
```

<b>-e</b>を追加しました。

あとは圧縮元のフォルダをドラッグ＆ドロップして実行するだけです。
暗号化するためのパスワード、確認用パスワードの入力が求められるので、間違いの無いよう慎重に入力しましょう。

![スクリーンショット 2020-12-08 23.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770386/9d400b53-c1ee-f9a1-b298-fb90826e64d1.png)


# ポイント
zipファイルを作る際に重要なポイントは、パスワードありの場合でもなしの場合でも、手順②です。

```terminal:パスワードなし
# 複数のファイル
% zip -r -j 任意のzip名.zip

# 1つファイルだけ
% zip -j 任意のzip名.zip
```

```terminal:パスワードあり
# 複数のファイル
% zip -r -j -e 任意のzip名.zip

# 1つファイルだけ
% zip -j -e 任意のzip名.zip
```

<b>-r</b>：複数ファイルが対象の時に使う
<b>-e</b>：1つのファイルが対象の時に使う
<b>-j</b>：保存するファイルのみ保存したい時に使う（これが無いとルートディレクトリのUsersからzipに保存されてしまう）


# 参考記事
https://stackoverflow.com/questions/24543255/command-line-zip-everything-within-a-directory-but-do-not-include-any-directory

https://superuser.com/questions/850829/how-to-zip-files-in-mac-without-root-folder

https://discussions.apple.com/thread/250841775