В настоящее время у меня есть скрипт Automator (Shell Script), который позволяет мне выбрать несколько файлов, а затем создать отдельный zip-файл для каждого.

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

Скриншот скрипта

Я хотел бы сделать то же самое, но также установить пароль для каждого отдельного файла. Любая помощь приветствуется!

1 ответ1

0

Так как вы используете скрипт уже, я предполагаю , что вы имеете доступ к Bash - команды read для чтения ввода переменной, и аналогичную команду zip к Debian, так что вы могли бы сначала сохранить пароль в переменную $pass с:

read -rsp "enter password" pass

Где означают варианты (от man bash или help 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

Если вы используете более простую оболочку, такую как /bin/sh / dash, команда чтения не имеет опции -s .

Затем заархивируйте файлы с помощью:

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

Примечание со страницы руководства zip:

-P password
--password password

Используйте пароль для шифрования записей zipfile (если есть). ЭТО НЕОБХОДИМО! Многие многопользовательские операционные системы предоставляют возможность любому пользователю видеть текущую командную строку любого другого пользователя; даже в автономных системах всегда существует угроза заглядывания через плечо. Хранение открытого текста как части командной строки в автоматическом скрипте еще хуже. По возможности, используйте не повторяющуюся, интерактивную подсказку для ввода паролей. (И там, где безопасность действительно важна, используйте надежное шифрование, такое как Pretty Good Privacy, вместо относительно слабого стандартного шифрования, предоставляемого утилитами zipfile.)

Если вы работаете на своем собственном защищенном компьютере, и за вами никто не наблюдает, то я не буду беспокоиться о потенциальной ненадежности использования такого пароля.

Или вы можете опустить сохранение пароля и параметр -P zip-файле и позволить 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

Похоже, что была проблема с предположением, что read bash будет работать, ваш скрипт автоматизатора не работает в обычном терминале, поэтому вы не можете получить его стандартный ввод. Вот некоторые другие идеи, которые могут работать.

Используйте bash, чтобы попросить больше информации

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

Hiroto Уровень пользователя: Уровень 5 (7,463 очка)

15 сентября 2015 2:57 в ответ на шотландца

Привет

Также вы можете делать все из оболочки. Что-то вроде этого.

#!/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"

С Уважением,

ЧАС

  • После того, как у вас работает функция ask, вы можете только запросить пароль (приведенный выше пример выглядит так, будто он запрашивает параметры для запуска python или чего-то еще, все, что вам нужно - это ask).

Запустите весь скрипт в терминале

Если вы можете запустить его в терминале, тогда read должно работать.

Получить Automator, чтобы попросить вас больше ввода

По всей видимости, этот вопрос на apple.stackexchange.com показывает, что есть способ, позволяющий автомату "Запросить текст" попытаться получить другую переменную.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .