Як я можу скористатися послугою Automator для створення файлу .zip з двох оригінальних файлів, що використовують таку ж назву?


4

enter image description here

Подивіться на зображення вище. Те, що я намагаюся зробити, це створити службу в Automator, яка дозволить мені вибрати два файли, наприклад

3LW і Loon - я роблю (хочуть ближче до вас) (дует) .cdg І 3LW And Loon - Дует (Дует) .mp3

І стиснути ці два файли в

3LW і Loon - Я (Потрібна близька до Вас) (Дует) .zip

А потім зможете рухатися вниз

38 Спеціальний - утримуйте Loosely.cdg І 38 Special - Hold On Loosely.mp3

і стиснути їх у .zip

38 Спеціальний - утримуйте Loosely.zip

Це взагалі можливо? Я не знаю, як це зробити. Будь-яка допомога на всіх буде оцінена. Дякую.

Відповіді:


4

Так, це реально, і в більш ніж один спосіб.

Нижче описано мінімальне без надмірностей робочий процес :

  • В Автоматизатор , виберіть: Файл & gt; Новий & gt; Сервіс

  • Встановити: Служба отримує вибрані файли або папки в Finder

  • Додайте наступне Дії :

  • Запустіть сценарій оболонки

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

Оновити, щоб додати переміщення файлів до Кошик :

  • Додайте ці додаткові Дії :

  • Отримати вибрані елементи пошуку

    • Набір Опції до: [√] Ігнорувати вхід цієї дії
      • Зверніть увагу, що це створює бажаний розрив між цим дії і попередній дії .
  • Перемістити елементи пошуку у кошик

  • Збережіть Робочий процес служби автоматизації надати йому відповідну назву, наприклад: Стиснути набір файлів

Тепер у Росії Finder , виберіть два з відповідні імена файлів , без розширення , потім клацніть правою кнопкою миші і виберіть Стиснути набір файлів , від послуги розділ контекстного меню .

Примітка: Цей мінімальний без надмірностей Automator Service Workflow не використовує перевірки помилок. Вона покладається на те, щоб правильно вибрати дві відповідні імена файлів, без різних розширень, які будуть стиснуті в zip-архіві імені файлу першого файлу, без його розширення.

Див робочий процес , під малюнком, що використовує умовну помилку перевірки та обробки і має деякі особливості без надмірностей робочий процес не має.

Automator Service Workflow


Другий робочий процес служби автоматизації

Наступне робочий процес має умовну перевірку помилок і обробку. Його можна використовувати замість без надмірностей робочий процес вище:

Він використовує як єдиний Запустіть сценарій оболонки дії для обробки всього процесу.

  • В Автоматизатор , виберіть: Файл & gt; Новий & gt; Сервіс

  • Встановити: Служба отримує вибрані файли або папки в Finder

  • Додати a Запустіть сценарій оболонки Дія

    • Налаштування: Оболонка: / bin / bash і Вхідні дані: як аргументи
    • Замінити всі код за замовчуванням з код показати далі нижче.
  • Збережіть Робочий процес служби автоматизації надати йому відповідну назву, наприклад: Стиснути набір файлів

Тепер у Росії Finder , виберіть два з відповідні імена файлів , без розширення , потім клацніть правою кнопкою миші і виберіть Стиснути набір файлів , від послуги розділ контекстного меню .

Це Робочий процес служби автоматизації використовує наступну перевірку та обробку умовних помилок:

  • Переконайтеся, що вибрано лише два елементи Finder .
  • Переконайтеся, що обидва файли мають однакове ім'я файлу, без розширення.
  • Переконайтеся, що розширення назви файлів відповідають очікуваному типу, "cdg" і "mp3".
  • Використовує відповідну обробку помилок, якщо помилки обробки вийшли.
  • Кодується, щоб мати змогу надавати як вербальні, так і візуальні повідомлення.
    • Встановлено для використання Центр повідомлень для візуальних повідомлень, але їх можна легко змінити, щоб говорити про повідомлення.

Фрелс:

  • Створює ті ж самі звуки під час стиснення та переміщення файлів до Кошик в Finder .
    • Може бути налаштований на відтворення цього звуку чи ні, за умовчанням він відтворюється.
  • Можна безпосередньо видалити файли, замість розміщення їх у Кошик .
    • Типовим є переміщення файлів до Кошик , зробіть цю зміну налаштування тільки ви повністю розумієте остаточність цієї дії.

Сценарій має два Функції а Main розділ.

  • Функція CompressSelectedFiles ()
    • Це обробляє грунт роботу і має настройки для звуку події стиснення і переміщення файлів в Кошик .
  • функція NotifyUserMessage ()
    • Це обробляє сповіщення користувача про різні повідомлення і налаштування типу повідомлень, вербальні і / або візуальні.
  • 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

Відмінно! Дуже дякую. Це чудово працює ... Одне останнє питання; чи є спосіб додати команду для видалення заархівованих файлів? Значення, я запускаю цю службу, вона створює .zip, а потім видаляє.
Robert M. Cluesman

@Robert М. Cluesman, я оновив оригінальний робочий процес на ваш коментар, а також додав другий робочий процес, який особисто я б використовував замість оновленого оригіналу, але це для вас, щоб вирішити.
user3439894

@Robert М. Cluesman, я не знаю, чи ви бачили оновлену відповідь, але я тільки що оновив другий робочий процес, я перемістив exit команд з function NotifyUserMessage() до function CompressSelectedFiles і розміщені exit після NotifyUserMessage виклику функції , де вони повинні були бути. Таким чином, ви використовуєте другий робочий процес, тоді обов'язково заміните код на нову копію поточного коду. До речі, було б приємно, якщо ви відзначите мою відповідь як прийняту відповідь, натисніть на √ ліворуч. :)
user3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.