===== Решение проблемы кодировок в архивах в macOS и отправка созданного архива почтой ===== {{:apple-mac-os:macos-high-sierra:pasted:20180520-183406.png }} В **macOS** есть старая проблема кодировок в **zip**-архивах. Если создать архив штатным архиватором, а после открыть его штатным архиватором Windows или старой версией **7-zip**, которая ещё не использовала кодировку **UTF-8** по умолчанию, то можно увидеть нечитаемые имена вложенных в архив файлов и каталогов: {{ :apple-mac-os:macos-high-sierra:pasted:20180520-182511.png }} Сторонние бесплатные архиваторы, например [[http://www.kekaosx.com/ru/|Keka]], также имеют эту проблему, хотя разработчик и обещает это решить. Коммерческие решения не проверялись. Когда я начал заниматься решением этой проблемы, задумался о том, что неплохо было бы иметь возможность создать архив и сразу добавить его в качестве вложения в почтовом сообщении. Установим бесплатную библиотеку **p7zip**:
brew install p7zipОткроем **Automator.app** и создадим документ типа **Служба** {{ :apple-mac-os:macos-high-sierra:pasted:20180520-182531.png }} Настроим параметры: **Служба получает файлы и папки** в **Finder.app** {{ :apple-mac-os:macos-high-sierra:pasted:20180520-182546.png }} Добавим 1 шаг (этот шаг – основной, так как с его помощью создаётся архив): Запустить **shell**-скрипт (тип **bash**), передать входные данные как аргументы. Вставим скрипт:
#!/bin/bash
#Блок переменных
TEMPPATH=~/tmp/arch4mail
ARCPATH=$(dirname "${1}")
ARCNAME=$(basename "${ARCPATH}")
#Расположение архива
echo "$TEMPPATH"/"$ARCNAME".zip
#Создать архив
for FILES in "$@"
do
/usr/local/bin/7z -tzip a "$TEMPPATH"/"$ARCNAME".zip "$FILES"
done
Добавим 2 шаг:
Запустить **shell**-скрипт; тип **bash**; передать входные данные как аргументы.
#!/bin/bash
echo "$1"
Вторым шагом получаем расположение архива. Это понадобится в дальнейшем для его удаления.
Добавим 3 шаг: Установить значение переменной. Создадим переменную, например ''Archive''.
Добавим 4 шаг: Получить указанные объекты **Finder**
Добавим 5 шаг: Новое сообщение почты. Если необходимо, в поле сообщения можно ввести текст, а также выбрать учётную запись, от имени которой будет выполняться отправка письма.
Если Вы используете сторонние решения клиента электронной почты, то необходимо добавить шаг «Открыть объекты Finder» и из ниспадающего списка выбрать свой почтовый клиент.
Добавим 6 шаг: Получить значение переменной. Выберем ранее созданную переменную Archive.
Добавим 7 шаг: Переместить объект Finder в корзину
Сохраняем службу под именем **Создать архив и отправить**
Проверяем работу службы.
В каталоге «Тест архива» располагаются файлы и каталог:
{{ :apple-mac-os:macos-high-sierra:pasted:20180520-182609.png }}
Выделяем всё и с контекстного меню из раздела «службы» выбираем **Создать архив и отправить**. Появляется окно почтового клиента:
{{ :apple-mac-os:macos-high-sierra:pasted:20180520-182624.png }}
Отправим и посмотрим то, как откроется архив штатным архиватором:
{{ :apple-mac-os:macos-high-sierra:pasted:20180520-182643.png }}
Обратная ситуация аналогична, если пользователь **Windows** создаст архив штатной сжатой папкой или будет использовать старую версию **7-zip**, то пользователь macOS увидит такое:
{{ :apple-mac-os:macos-high-sierra:pasted:20180520-182735.png }}
Для решения этого вопроса проще использовать готовое бесплатное решение доступное в [[https://itunes.apple.com/us/app/the-unarchiver/id425424353|AppStore – The Unarchiver]].
Стоит заметить, что подобный архив не откроется на **iOS* в программе **Файлы**.
----
Проверено на следующих конфигурациях:
^ Версия ОС ^
|Apple macOS High Sierra (10.13.4)|
----
{{:user:vyakob.png?50&nolink |}} Автор первичной редакции:\\ [[user:vyakob|Виталий Якоб]] \\ Время публикации: 20.05.2018 18:09
{{tag>Apple "Mac OS" macOS "High Sierra" "Mail.app" Unarchiver Archive Finder Automator zip 7-zip Bash Script}}
~~DISCUSSION~~