===== Решение проблемы кодировок в архивах в 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~~