Macのターミナルでパスワード付き圧縮 (zip) ファイルを作る方法は?zipcloakではうまくいかない場合があります。

Apple

 

 

ZIPファイルにパスワードをかけたい!!!

メールに添付してZIPファイルをやり取りするときなど、パスワードをかけたい場面がありますよね。

そんな時に、Macなら特別なツール無しにすぐにZIPファイルにパスワードを付けられます!

ターミナルという内蔵アプリを用います。コマンドを手打ちして行うので最初はハードルが高いと感じるかもしれませんが、慣れればなんてことはありません。

ただ検索すると、

zipcloak

というコマンドがかなりヒットしますね。

でも、これうまく使えない場合があるみたいです。

自分はこのコマンドを試した時、何度やっても出来ませんでした。

今回は、zipcloakが使えない場合、どのようにしたら良いかその対策を解説します。

まずおさらい。zipファイルを作るには…

zipファイルというのは、圧縮ファイルのことですね。

Macではコンテキストメニュー(すなわち右クリックすると表示されるメニュー)から簡単にzipファイルを作成できます。

対象のファイルを選択して右クリックし、出てきたメニューから選ぶだけです。

zipcloakとは

これはMaczipファイルにパスワードをかけるターミナルコマンドです。

ウェブ上でヒットする記事の多くがzipcloakを勧めていますが、そのプロセスは大抵

「ターミナル」を起動→zipcloakと打ち込む

そこにパスワードをかけたいzipファイルをドラッグ&ドロップする

パスワードを打ち込む

パスワード付きzipファイルの完成!

となっているのですね。

zipcloakが使えないケースがある

ところがです。

この方法を使うと一見うまくパスワードを掛けることができるように見えますが、私が実際やってみたところ、困ったことが起こりました。

設定したはずのパスワードを入力しても開かないのです。

これは困りました。

他に、エラーが出たという報告も検索するとヒットします

zipcloakが使えない理由

zipcloakが使えない場合があることの明確な理由はよく分かりません。

きちんと使える人もいるようです。

いわゆる「おま環」なのかもしれませんが、検索してみるとたまにそういうコメントがヒットしたりするので、完全なおま環でもないようです。

おま環とは
お前の環境だけ、というような意味。
電化製品やパソコン・通信関連領域において、ある挙動(普通は不具合のことが多い)が一般的なものではなく、特定の個人の環境のみで発生すること。

zipcloakをキチンと使えるようにする方法

実は、これは簡単です。

圧縮してzipファイルを作るとき、右クリックで表示されるコンテキストメニューから行わず、ターミナル上でコマンドを用いて圧縮すればOKです。

こうやって作成したzipファイルであれば私の環境でもzipcloakできちんとパスワードを掛けることができました。

つまり、理由はよく分かりませんが、どうやってzipファイルを作成したか…によってzipcloakがうまく動くかどうか決まるようです。

ターミナルを使おう!

先に述べたようにすればzipcloakを使えますが、どんな環境でも確実にできるのが最初から全てターミナルで行う方法です。

敷居が高く思えますが、やってみると簡単なのでぜひ覚えておくことをオススメします。

まずターミナルを起動させます。

ターミナルはアプリケーションフォルダ内のユーティリティにあります。

私はDockに加えてすぐ起動できるようにしています。

ターミナルの原則

ここがちょっと面倒とか難しいと思われる点なのですが、ターミナルでスグに操作できる対象は、デフォルトではホームディレクトリの中にあるものだけとなっています。

出た~、ホームディレクトリとかワケの分からん用語と思うかもしれませんが

ホームディレクトリとは

Macintosh HD

ユーザ

と進んだフォルダの中にある、

家のかたちのアイコンで表されてるフォルダ

のことです。要するにユーザー固有でまず用意されているフォルダです。

ターミナルでは特に指定しない限り、最初はこのユーザーディレクトリ内しか対象にしていないのです。

たとえば「沖縄旅行」というフォルダがデスクトップにあったとしましょう。

これを圧縮したいと思ってターミナルを用いる際、ターミナル内で「沖縄旅行」と指定しても「そんなファイルは無いよ」という返事が返ってきてしまうのです。

ターミナルはユーザーディレクトリ内しか見ていないからですね。

これを解決するためには次に述べる2つの方法があります。

ターミナルでのファイルの指定方法

1.ターミナルに指示を出すとき、目的のファイル名だけではなく、その置き場所まで含めて指定する

これは、目的のファイルを指定する時に単なるファイル名で指定するのではなく、「パス」という位置情報まで含めた方法で指定する方法です

例えばデスクトップに目的のファイルがある場合、Macであれば

Users/”ユーザー名”/Desktop/“目的のファイル名(+拡張子)”

というように入力するのです。これがパス表示というものになります。

(※目的のファイルがフォルダであれば拡張子の入力は必要ありません)

2.ターミナルが操作対象とする場所をそもそも変える

先に述べたようにターミナルはそのままだとユーザーディレクトリ内しか操作の対象としませんが、この対象とする場所を最初から変えてしまうという方法です。

方法は簡単で、対象とする場所を最初に一度だけパスで指定するだけです。具体的には以下のように入力してEnterキーを押せばOKです。

cd ”対象としたい所のパス”

例えば、デスクトップなら…

cd /Users/“ユーザ―名”/Desktop/

これを入力することで、ターミナルはデスクトップを対象としてくれるようになります。

つまりこれで、デスクトップにあるファイルならば、その「名前(+拡張子)」を入力するだけでターミナルで操作することが可能になるのです。

ちなみにデスクトップの上にある特定のフォルダ内で色々操作したいとき例えば「Kiroku」というフォルダ内のファイルを扱いたいのであれば

cd /Users/“ユーザ―名”/Desktop/Kiroku

とすれば良いのです。

さらにその中にもフォルダがあってその中で操作したければ、/(スラッシュ)を挟んで末尾にどんどんフォルダ名を繋げていくだけです。

どちらが良いか?

個人的には2の方法が非常にオススメです。

最初に1回入力するだけですからね。

あと実は、圧縮する場合に対象をパスで指定するとちょっと面倒くさいことが起こるのです。

話が難しくなるのでこれは最後に書きますね。

ターミナルで圧縮ファイルを作成・パスワードをかける方法

では具体的な方法を解説します。

まず最初に、上で述べたようにターミナルの対象を変えてしまって下さい。

デスクトップでも他の場所でも、とにかく操作したいファイルがある場所を指定して変えておきます。

今回の例として、先ほどの説明に出したデスクトップ上にあるKiroku」というフォルダの中に「hogehoge」というフォルダがあり、その中にはphoto.jpgという画像ファイルがあって、このhogehogeをパスワード付きzipファイルにしたいとします。

つまり圧縮する目的はphoto.jpgが入ったhogehogeで、その舞台はKirokuフォルダ内ということですから、まずターミナルが扱う対象をこのKirokuフォルダに変えるわけです。

これは以下のように入力すれば良かったですね。

cd /Users/Desktop/Kiroku

次に、以下のコマンドを入力してEnterキーを押します。

zip -e -r “圧縮後のファイル名”.zip ”圧縮前のファイル名”

たとえば「hogehoge」というフォルダを圧縮して「hogehoge.zip」というファイルを作りたいとします。そしてフォルダの中にはphoto.jpgという写真ファイルがあるとします。

その場合にパスワード付き圧縮ファイルを作るコマンドは

zip -e -r hogehoge.zip hogehoge

になります。

こう入力してEnterを押すと、次にパスワードの設定を要求されます

パスワードをを打ち込みEnterを押すと確認のために再度の入力を要求されますので、同じパスワードを打ち込みEnterを押します。

なお、パスワードを打ち込んでもEnterキーを押すまでは画面にまったく変化がなくあれ?打ち込んでるのに認識されてない?と思うかもしれませんが、入力はきちんとターミナルに伝わっているので大丈夫です。

パスワード設定の打ち込みが無事2回終われば、zipファイルが作成されます。

zipファイルが作成される場所は初めに“ターミナルが認識するところ”として設定した場所で、当然元ファイルがあったところと同じ場所です。

作成されたzipファイルを確認し、設定したパスワードできちんと開くかどうかを必ず確認するようにしましょう。

きちんと開いて、中にphoto.jpgがあれば成功です。

思い込みや打ち間違いで誤った入力がされている場合がたまにありますので注意が必要です。

zipファイルは元ファイルとは別に作られますので、元ファイルが失われることはありません。設定したはずのパスワードで開かない場合はそのzipファイルは削除し、同様の手順で改めて作り直すようにしましょう。

ターミナルへのドラッグ&ドロップってどうなの?

最初の方で述べた”zipcloak”を用いる方法の中で、ターミナルへ「パスワードをかけたいzipファイルをドラッグ&ドロップする」と書きましたが

実は、ターミナルは、いちいち手打ちでファイル名やフォルダ名を打ち込まなくても、対象のモノをターミナルの画面にドラッグ&ドロップするだけで自動的にターミナルにそれが文字列として表示されます

ただし、そのモノの場所も含めてですつまりパスが表示されることになるのですね。

たとえば先に例として出したデスクトップにあるKirokuフォルダであれば、ターミナルにドラッグ&ドロップすることにより

/Users/“ユーザ―名”/Desktop/Kiroku

という文字列が現れます。何か思い出しませんか?

そうです、先に述べました

「ターミナルでのファイルの指定方法」

での

1.ターミナルに指示を出すとき、目的のファイル名だけではなく、その置き場所まで指定する」

で、ファイルをパスで指定する方法を解説しましたが…

この「ファイルをドラッグ&ドロップする」という方法を使えば、いちいちパスを手打ちする必要がなくなるわけです。

まぁパスは手打ちしなくても取得する方法は他に色々とあるのですが、ドラッグ&ドロップなら最も直感的に手間が少なくできますよね。

超便利!!と言いたいところですが、このドラッグ&ドロップにはちょっとした問題があります。

ターミナルにドラッグ&ドロップして圧縮することの問題点とは

これは結論から言うと、

問答無用でそのディレクトリ構造のまま圧縮される

ということでしょう。

どういうことか言いますと、ドラッグ&ドロップして現れるパスを表す文字列、今回の例では

/Users/“ユーザ―名”/Desktop/Kiroku

ですが、この階層構造のままに圧縮されてしまうのです。

たとえば、以下のコマンドでKirokuフォルダをKiroku.zipというファイル名を付けて圧縮することにしましょう。

zip -e -r /Users/“ユーザ―名”/Desktop/Kiroku

出来上がった「Kiroku.zip」を解凍すると、現れるのはまず

Usersフォルダ

なんです。これを開いていかねばなりません。つまり、

Userフォルダ」

の中に「”ユーザー名”フォルダ」があり、

その中に「Desktopフォルダ」があり、

その中にやっと「Kirokuフォルダ」が出てくるのです。

これは解凍して取り出す時、ちょっとウザいですよね

それにユーザー名と同じ名前のフォルダもできちゃったりしますし、誰かに送る時はちょっと恥ずかしいですよね。

いや別に致命的な問題とかでも全然ないんですけど、できれば避けたい、と思われる方も多いのではないでしょうか

ドラッグ&ドロップは簡便ですが、zipコマンドに用いるときはこのような落とし穴があります。注意しましょう。

補足

以上の説明では突然

zip -e -r

のコマンドを登場させてしまいましたが、zipという一つのコマンドだけでも動作はします。

zipコマンドを単独で用いるとどうなるか

zipコマンド”だけ”を用いると、すなわち-e -rを省いた場合、指定したそのものだけしか圧縮してくれません

どういうことかと言うと、先の例で出した「Kirokuフォルダ」を指定してzipコマンドで圧縮した場合、できあがったzipファイルを解凍すると、「Kirokuフォルダ」そのものまでしか出てきません。

そのフォルダを開くと中身は空っぽです。

つまりKirokuフォルダに入っていたphoto.jpgまでは圧縮してくれません

よって、圧縮したい最終目的がphoto.jpgの場合、zipコマンド単独で圧縮する際はphoto.jpgを直接指定して圧縮しなければなりません。

zip -rはディレクトリ構造を保って圧縮してくれる

フォルダを指定しつつ、その中身までまとめて圧縮したいような場合は、zipコマンドの後に半角空けて-rを付けることにより、指定したディレクトリ以下の階層構造を保って圧縮してくれます。

つまり、zip -rコマンドなら、先に例として出したhogehogeフォルダだけを指定して圧縮したとしても、

hogehogeフォルダとその中のphoto.jpgまでまとめて圧縮

してくれるのです。

これで出来上がったhogehoge.zipを解凍するとまずhogehogeフォルダが現れ、その中にはキチンとphoto.jpgがある、というようになるわけですね。

-rを付けたのはそういう意味があったわけです。

なみに、-eはもう分かりますよね、パスワードを付加するコマンドです。

まとめ

以上、zipcloakが使えない場合や、zipcloakに頼らないファイルのパスワード付き圧縮の話でした。

やや、というかかなりクドてしつこい説明になってしまいましたが、誰かのお役に立てれば幸いです。

コメント

',Y.captions&&l){var u=T("figcaption");u.id="baguetteBox-figcaption-"+t,u.innerHTML=l,s.appendChild(u)}n.appendChild(s);var c=T("img");c.onload=function(){var n=document.querySelector("#baguette-img-"+t+" .baguetteBox-spinner");s.removeChild(n),!Y.async&&e&&e()},c.setAttribute("src",r),c.alt=a?a.alt||"":"",Y.titleTag&&l&&(c.title=l),s.appendChild(c),Y.async&&e&&e()}}function b(t){var e=t.href;if(t.dataset){var n=[];for(var o in t.dataset)"at-"!==o.substring(0,3)||isNaN(o.substring(3))||(n[o.replace("at-","")]=t.dataset[o]);for(var i=Object.keys(n).sort(function(t,e){return parseInt(t,10)=1?(M--,y(),C(M),t=!0):Y.animation&&(A.className="bounce-from-left",setTimeout(function(){A.className=""},400),t=!1),Y.onChange&&Y.onChange(M,V.length),t}function y(){var t=100*-M+"%";"fadeIn"===Y.animation?(A.style.opacity=0,setTimeout(function(){j.transforms?A.style.transform=A.style.webkitTransform="translate3d("+t+",0,0)":A.style.left=t,A.style.opacity=1},400)):j.transforms?A.style.transform=A.style.webkitTransform="translate3d("+t+",0,0)":A.style.left=t}function v(){var t=T("div");return"undefined"!=typeof t.style.perspective||"undefined"!=typeof t.style.webkitPerspective}function w(){var t=T("div");return t.innerHTML="","http://www.w3.org/2000/svg"===(t.firstChild&&t.firstChild.namespaceURI)}function k(t){t-M>=Y.preload||m(t+1,function(){k(t+1)})}function C(t){M-t>=Y.preload||m(t-1,function(){C(t-1)})}function x(t,e,n,o){t.addEventListener?t.addEventListener(e,n,o):t.attachEvent("on"+e,function(t){(t=t||window.event).target=t.target||t.srcElement,n(t)})}function E(t,e,n,o){t.removeEventListener?t.removeEventListener(e,n,o):t.detachEvent("on"+e,n)}function B(t){return document.getElementById(t)}function T(t){return document.createElement(t)}var N,A,L,S,P,F='',H='',I='',Y={},q={captions:!0,buttons:"auto",fullScreen:!1,noScrollbars:!1,bodyClass:"baguetteBox-open",titleTag:!1,async:!1,preload:2,animation:"slideIn",afterShow:null,afterHide:null,onChange:null,overlayBackgroundColor:"rgba(0,0,0,.8)"},j={},X=[],M=0,R={},O=!1,z=/.+\.(gif|jpe?g|png|webp)$/i,D={},V=[],U=null,W=function(t){-1!==t.target.id.indexOf("baguette-img")&&g()},G=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,h()},J=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,p()},K=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,g()},Q=function(t){R.count++,R.count>1&&(R.multitouch=!0),R.startX=t.changedTouches[0].pageX,R.startY=t.changedTouches[0].pageY},Z=function(t){if(!O&&!R.multitouch){t.preventDefault?t.preventDefault():t.returnValue=!1;var e=t.touches[0]||t.changedTouches[0];e.pageX-R.startX>40?(O=!0,h()):e.pageX-R.startX100&&g()}},$=function(){R.count--,R.count
タイトルとURLをコピーしました