0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AppleScriptでパスワード付きzipを生成してみた(AppleSilicon搭載Macでも動作)

Posted at

はじめに

今まで知ってはいたが、使ったことがなかったので
AppleScriptを勉強がてら使ってみました。

今回は、試しに暗号化zipを作るためのAutomatorワークフロー(アプリ)を
作ってみたいと思います。

※Apple Silicon搭載 MacでRosettaなしでも動作すると思います。

ステップ

1. Automatorで新規アプリを作成

AutomatorはMac上の様々な操作を自動化するためのツールです。
まずは、Finderでファイル選択をさせるUIを表示します。
「ファイルとフォルダ」の「Finder項目の選択を求める」をドラッグ&ドロップして、
左のペインに表示します。
スクリーンショット 2020-12-08 14.38.19.png
次に、「ユーティリティ」の「AppleScriptを実行」をドラッグ&ドロップして、
左のペインに表示します。
スクリーンショット 2020-12-08 14.38.46.png

2. AppleScriptを記述

「AppleScriptを実行のブロック」の中に下記のようなコードを記述します。

zipper
on run {input, parameters}
	
	set filePath to item 1 of input
	set fileName to name of (info for filePath)
	set isFolder to folder of (info for filePath)
	
	# ダイアログを表示して、パスワード文字列の入力を受け付ける
	display dialog "zipパスワードを入力してください(記号不可)" default button 2 default answer ""
	set tmpText to result
	set passText to text returned of tmpText
	
	if isFolder then
		# フォルダの場合
		tell application "Terminal"
			activate
			set win to do script "rm -rf ~/Desktop/archive.zip && cd " & quoted form of POSIX path of filePath & " && cd ../ && zip -P='" & passText & "' -r ~/Desktop/archive.zip './" & fileName & "' && exit"
			repeat
				delay 0.1
				if not busy of win then exit repeat
			end repeat
			quit
		end tell
	else
		# ファイルの場合
		tell application "Terminal"
			activate
			set win to do script "rm -rf ~/Desktop/archive.zip && zip -j -P='" & passText & "' ~/Desktop/archive.zip '" & POSIX path of filePath & "' && exit"
			repeat
				delay 0.1
				if not busy of win then exit repeat
			end repeat
			quit
		end tell
	end if
	
	return
end run

ポイント説明

input受け取り

「Finder項目の選択を求める」ブロックで選択されたファイル情報がAppleScriptのinputで受け取レます。

パスワードテキスト受け取り

dialog
display dialog "zipパスワードを入力してください(英数字のみ、記号不可)" default button 2 default answer ""

この記述で、AppleScriptから簡単な入力を求めるダイアログを表示することができます。

コマンド呼び出し

内部ではzipコマンドを呼び出して、
ディレクトリかファイルかを判断して、それぞれ処理をしています。

最後に

AppleSilicon版Macでも動作確認済みです。
※Rosettaなしでも動作可能です。

TODO

  1. この方法でzipしても、Windowsで日本語文字の含まれるファイルをunzipすると文字化けします。
  2. パスワード入力時の注意として、記号が使えないという点がありますが、適切にエスケープすれば、使えるようになると思います。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?