Есть ли способ зашифровать каталог с помощью gpg
? Кажется, он принимает файлы только в качестве аргументов.
Есть ли способ зашифровать каталог с помощью gpg
? Кажется, он принимает файлы только в качестве аргументов.
Ответы:
Почему бы не tar
зашифровать файлы, а затем зашифровать тарбол?
Я только что увидел вариант --multifile
на странице руководства:
Это изменяет некоторые другие команды для принятия нескольких файлов для обработки в командной строке или чтения из STDIN с каждым именем файла в отдельной строке. Это позволяет обрабатывать много файлов одновременно. --multi- file в настоящее время может использоваться вместе с --verify, --encrypt и --decrypt. Обратите внимание, что --multifile --verify не может использоваться с отдельными подписями.
Что вы конкретно ищете, --encrypt-files
и, опять же, справочная страница:
Идентичен --multifile --encrypt.
Эй, я прочитал комментарии к ответу, который был помечен как исключенный; Похоже, вы должны быть осведомлены о магии |
(анонимных каналов). Проверьте ответ, который я только что опубликовал на superuser, и вы обнаружите, что tar
& gpg
можно объединить так , чтобы ваш вывод был сжат и зашифрован перед выводом. Обратите внимание, что он по-прежнему будет использовать значительные системные ресурсы, поэтому проверьте команды на man
страницах, чтобы nice
ограничить способность команд поглощать только определенный процент ресурсов. Кроме того, пока я в настроении предлагать темы, которые могут облегчить вашу жизнь в командной строке в целом; посмотрите на файловые дескрипторы и именованные каналы для передачи данных.
Если вы хотите увидеть, какую магию можно выполнить, когда понятны вышеперечисленные темы, проверьте журналы сборки Travis-CI и соответствующие сценарии на наличие решений, связанных с автоматизацией GnuPG в командной строке.
---- Обновления
В соответствии с просьбой, пример для работы с каталогами может быть найден в ранее упомянутом сценарии в строке 680, и более обобщенный пример будет ...
#!/usr/bin/env bash
dir_path="${1:?${0##*/} needs a directory path as the first argument}"
default_gpg_email="your-email@host.domain"
gpg_email="${2:-$default_gpg_email}"
_dir_name="${dir_path##*/}"
_dir_name="${_dir_name%/*}"
Var_star_date="$(date -u +%s)"
if [ -d "${dir_path}" ]; then
tar -cz - "${dir_path}" | gpg --always-trust --armor --batch --no-tty --encrypt --recipient ${gpg_email} > /tmp/${Var_star_date}_${_dir_name}.tgz.gpg"
else
echo "${0##*/} operates on directories"
exit 1
fi
... который может работать с script-name.sh /path/to/dir
или script-name.sh /path/to/dir new-email@host.domain
и должен выводить в /tmp
каталог файл<current-date>_<top-dir-name>.tgz.gpg