Так, це реально, і в більш ніж один спосіб.
Нижче описано мінімальне без надмірностей робочий процес :
В Автоматизатор , виберіть: Файл & gt; Новий & gt; Сервіс
Встановити: Служба отримує вибрані файли або папки в Finder
Додайте наступне Дії :
Запустіть сценарій оболонки
- Налаштування: Оболонка: / bin / bash і Вхідні дані: як аргументи
- Замінити всі код за замовчуванням лише з:
echo "$(basename "${1%.*}")"
- Це повертає ім'я файлу частина першої файл , без її розширення , і є що Встановити значення змінної встановлюється на.
- Встановити значення змінної
- Натисніть, Змінна: нова змінна ... і надати йому відповідну назву, наприклад: ZipFileName
- Отримати вибрані елементи пошуку
- Набір Опції до: [√] Ігнорувати вхід цієї дії
- Зверніть увагу, що це створює бажаний розрив між цим дії і попередній дії .
- Створити архів
- Набір Зберегти як: до ZipFileName перетягуванням змінної від Змінна розділ внизу панелі робочого процесу .
- Набір Де: до Та ж папка, що і вхід .
Оновити, щоб додати переміщення файлів до Кошик :
Додайте ці додаткові Дії :
Отримати вибрані елементи пошуку
- Набір Опції до: [√] Ігнорувати вхід цієї дії
- Зверніть увагу, що це створює бажаний розрив між цим дії і попередній дії .
Перемістити елементи пошуку у кошик
Збережіть Робочий процес служби автоматизації надати йому відповідну назву, наприклад: Стиснути набір файлів
Тепер у Росії Finder , виберіть два з відповідні імена файлів , без розширення , потім клацніть правою кнопкою миші і виберіть Стиснути набір файлів , від послуги розділ контекстного меню .
Примітка: Цей мінімальний без надмірностей Automator Service Workflow не використовує перевірки помилок. Вона покладається на те, щоб правильно вибрати дві відповідні імена файлів, без різних розширень, які будуть стиснуті в zip-архіві імені файлу першого файлу, без його розширення.
Див робочий процес , під малюнком, що використовує умовну помилку перевірки та обробки і має деякі особливості без надмірностей робочий процес не має.

Другий робочий процес служби автоматизації
Наступне робочий процес має умовну перевірку помилок і обробку. Його можна використовувати замість без надмірностей робочий процес вище:
Він використовує як єдиний Запустіть сценарій оболонки дії для обробки всього процесу.
В Автоматизатор , виберіть: Файл & gt; Новий & gt; Сервіс
Встановити: Служба отримує вибрані файли або папки в Finder
Додати a Запустіть сценарій оболонки Дія
- Налаштування: Оболонка: / bin / bash і Вхідні дані: як аргументи
- Замінити всі код за замовчуванням з код показати далі нижче.
Збережіть Робочий процес служби автоматизації надати йому відповідну назву, наприклад: Стиснути набір файлів
Тепер у Росії Finder , виберіть два з відповідні імена файлів , без розширення , потім клацніть правою кнопкою миші і виберіть Стиснути набір файлів , від послуги розділ контекстного меню .
Це Робочий процес служби автоматизації використовує наступну перевірку та обробку умовних помилок:
- Переконайтеся, що вибрано лише два елементи Finder .
- Переконайтеся, що обидва файли мають однакове ім'я файлу, без розширення.
- Переконайтеся, що розширення назви файлів відповідають очікуваному типу, "cdg" і "mp3".
- Використовує відповідну обробку помилок, якщо помилки обробки вийшли.
- Кодується, щоб мати змогу надавати як вербальні, так і візуальні повідомлення.
- Встановлено для використання Центр повідомлень для візуальних повідомлень, але їх можна легко змінити, щоб говорити про повідомлення.
Фрелс:
- Створює ті ж самі звуки під час стиснення та переміщення файлів до Кошик в Finder .
- Може бути налаштований на відтворення цього звуку чи ні, за умовчанням він відтворюється.
- Можна безпосередньо видалити файли, замість розміщення їх у Кошик .
- Типовим є переміщення файлів до Кошик , зробіть цю зміну налаштування тільки ви повністю розумієте остаточність цієї дії.
Сценарій має два Функції а Main розділ.
Код для Запустіть сценарій оболонки Дія :
#!/bin/bash
### Functions ###
function CompressSelectedFiles () {
# Change to the target directory,
# or notify user of failure and exit.
if ! cd "$(dirname "$1")"; then
NotifyUserMessage 'nochgdir'
exit
fi
# Set the two filenames to variables.
f1="$(basename "$1")"
f2="$(basename "$2")"
# Check to see if the target zip archive
# already exists, and if not, create it.
if [[ ! -e "${f1%.*}.zip" ]]; then
# Syntax: zip [options] zipfile file ...
if ! zip "${f1%.*}.zip" "${f1}" "${f2}"; then
NotifyUserMessage 'ziperror'
exit
fi
# # The following lines of code mimic Finder's Compress command
# # as to numerically incrementing an archive's filename. It has
# # been commented out as the user requested to delete the files
# # after I wrote this. I've left it, in case it's found useful.
#
# else
# # The zip archive already exists!
# # Numerically increment the zip filename.
# n=2
# for f in ${f1%.*} *.zip; do
# if [[ "${f1%.*} $n.zip" == "$f" ]]; then
# n="$(( n + 1 ))"
# fi
# done
# # Syntax: zip [options] zipfile file ...
# if ! zip "${f1%.*} $n.zip" "${f1}" "${f2}"; then
# NotifyUserMessage 'ziperror'
# exit
# fi
# Make the same event sound Finder does when compressing files.
# Note: Despite its name, this *is* the sound made by Finder when compressing files.
# If you do not want to hear it, set 'playthis=1' to 'playthis=0'.
playthis=1
[[ $playthis -eq 1 ]] && afplay "/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/system/Volume Mount.aif"
[[ $playthis -eq 1 ]] && sleep 1 # Pause to allow time between event sounds.
fi
# The following was added per user request.
#
# Move File Set to the Trash. So you can then use
# Put Back from the Trash in Finder, if necessary.
# Default is to use the Trash, setting 'trash=1'.
#
# If you don't want to put the files in the Trash,
# just delete them directly, then set 'delete=1'
# and set 'trash=0' when setting 'delete=1'.
#
# WARNING: Setting 'delete=1', this method
# is immediate and irreversible.
trash=1
delete=0
[[ $trash -eq 1 ]] && osascript -e "set theFiles to {}" \
-e "set the end of theFiles to POSIX file \"$1\"" \
-e "set the end of theFiles to POSIX file \"$2\"" \
-e "tell application \"Finder\" to move theFiles to trash"
[[ $delete -eq 1 ]] && rm "$1" "$2"
# Notify user processing is finished.
NotifyUserMessage 'finished'
}
function NotifyUserMessage() {
# Set servicename='' to the name of this service.
servicename='Compress File Set'
# As currently set, messages are sent to the Notification Center.
# If you want a verbal message, change the value of 'verbal=0'
# to 'verbal=1'. If your OS version is older and doesn't support
# Notification Center from scripts, e.g. OS X 10.8, then change
# 'visual=1' to 'visual=0'. Whichever your preference is, set 0
# for false and 1 for true.
verbal=0
visual=1
case $1 in
selected )
msg='This service requires two files to be selected.'
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename Error\""
;;
filenames )
msg='The filenames, sans extensions, are mismatched.'
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename Error\""
;;
extensions )
msg='One or both file extensions are not the expected type.'
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename Error\""
;;
nochgdir )
msg='An error occurred while trying to change directory.'
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename Error\""
;;
ziperror )
msg='An error occurred while compressing the files.'
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename Error\""
;;
finished )
msg='The selected files have been compressed.'
[[ $verbal -eq 1 ]] && sleep 1 # Pause so as not to step on previous event sound.
[[ $verbal -eq 1 ]] && say "$msg"
[[ $visual -eq 1 ]] && osascript -e "display notification \"$msg\" with title \"$servicename\""
;;
esac
}
### Main ###
# Validate Conditions #
# Make sure only two items are selected in Finder.
if [[ $# -eq 2 ]]; then
# Make sure both files have the same filename, sans extension.
if [[ ${1%.*} == "${2%.*}" ]]; then
# Make sure the filename extensions match the expected type, 'cdg' and 'mp3'.
if [[ ${1##*.} =~ [cC][dD][gG] ]] && [[ ${2##*.} =~ [mM][pP]3 ]]; then
# All conditions met, create zip archive.
CompressSelectedFiles "$1" "$2"
elif [[ ${2##*.} =~ [cC][dD][gG] ]] && [[ ${1##*.} =~ [mM][pP]3 ]]; then
# All conditions met, create zip archive.
CompressSelectedFiles "$1" "$2"
else
NotifyUserMessage 'extensions'
fi
else
NotifyUserMessage 'filenames'
fi
else
NotifyUserMessage 'selected'
fi