在 Mac 上使用密码保护多个单独的 ZIP 文件

在 Mac 上使用密码保护多个单独的 ZIP 文件

目前,我有一个 Automator 脚本(Shell 脚本),它允许我选择多个文件,然后为每个文件创建一个单独的 zip 文件。

for f in "$@"
do
    zip -j "$f.zip" "$f"
done

脚本截图

我想做的是同样的事情,但也要为每个单独的文件设置密码。任何帮助都非常感谢!

答案1

由于您已经在使用 shell 脚本,我假设您可以访问 bash 的read命令来读取变量的输入,以及类似于zipDebian 的命令,因此您可以先使用以下命令将密码存储到变量中$pass

read -rsp "enter password" pass

其中选项的含义是(从man bashhelp read):

-p prompt output the string PROMPT without a trailing newline before
          attempting to read
-r        do not allow backslashes to escape any characters
-s        do not echo input coming from a terminal

如果您使用的是更基本的 shell(例如/bin/sh/dash),则它的读取命令没有该-s选项。

然后使用以下命令压缩文件:

zip -j -e -P "$pass" "$f.zip" "$f"

来自 zip 手册页的注释:

-P password
--password password

使用密码加密 zipfile 条目(如果有)。这是不安全的!许多多用户操作系统为任何用户提供了查看其他用户当前命令行的方法;即使在独立系统上,也总是存在被偷看的威胁。将明文密码作为命令行的一部分存储在自动脚本中甚至更糟糕。尽可能使用无回显的交互式提示输入密码。(如果安全性确实很重要,请使用强加密(如 Pretty Good Privacy),而不是 zipfile 实用程序提供的相对较弱的标准加密。)

如果您使用自己的私人安全计算机并且没有人监视您,那么我不会担心使用此类密码的潜在不安全性。

或者您可以省略密码存储和 zip 的-P选项,让 zip 提示您输入每个文件的密码(两次)。


总的来说,要求输入一次密码看起来是这样的:

读取-rsp“输入密码”通过

# If you don't mind seeing the password, it would be safe to verify it:
echo -e "\nUsing this password: $pass"
read -r -n1 -p "Press any key to continue..."
echo

for f in "$@"
do
    zip -j -e -P "$pass" "$f.zip" "$f"
done

或者循环读取两次密码,直到两次密码匹配:

until [ "$pass" == "$pass2" ]; do
  read -r  -p "Enter password" pass
  read -r  -p "Enter password again" pass2
done

for f in "$@"
do
    zip -j -e -P "$pass" "$f.zip" "$f"
done

似乎假设 bashread可以工作存在问题,您的自动程序脚本未在常规终端中运行,因此您无法获取其标准输入。以下是一些可能可行的其他想法。

使用 bash 请求更多输入

https://discussions.apple.com/thread/7216062?answerId=28893979022#28893979022

Hiroto 用户等级:5级(7,463分)

2015 年 9 月 15 日 上午 2:57 回应 Scotsman

你好

你也可以通过 shell 来做任何事情。就像这样。

#!/bin/bash

ask () {
    osascript <<EOF - 2>/dev/null
tell application "SystemUIServer"
    activate
    text returned of (display dialog "$1" default answer "")
end tell
EOF
}

FROM=$( ask 'Enter value for --from' ) || exit
CREDITS=$( ask 'Enter value for --credits' ) || exit
CAPACITY=$( ask 'Enter value for --capacity' ) || exit
LY_PER=$( ask 'Enter value for --ly-per' ) || exit

trade.py run --from "$FROM" --credits "$CREDITS" --capacity "$CAPACITY" --ly-per "$LY_PER"

问候,

H

  • 一旦您让 ask 函数工作起来,您就只需要询问密码(上面的例子看起来像是要求输入参数来运行 python 或其他东西,您所需要的只是 ask)。

在终端中运行整个脚本

如果您可以在终端中运行它那么它read应该可以工作。

让自动化程序要求您输入更多内容

显然apple.stackexchange.com 上的这个问题看起来有一种方法可以让自动程序“询问文本”尝试获取另一个变量。

相关内容