Пакетне стиснення декількох папок в окремі поштові файли


12

У мене є десятки папок, які мені потрібно стиснути в окремі поштові файли.

Якщо я вибираю всі ці папки в Finder і роблю "Стиснення [X] елементів", я отримую один поштовий файл, що містить усі папки, тоді як мені потрібно один поштовий файл у папці.

Я спробував створити робочий процес із Automator за допомогою дії «Створити архів», але він поводиться так само: введення декількох файлів / папок видає один поштовий файл. Неможливо вказати, що дія виконується для кожного елемента окремо.

В основному я шукаю спосіб уникнути необхідності втомливо запускати "Стиснути" у Finder у кожній папці по одній. Чи є спосіб автоматизувати це?


1
Я оновив свою відповідь, щоб поліпшити код, який використовується для збільшення назви файлу архіву zip, щоб він імітував, як контекстне меню Finder стискає [n] Пункти збільшує ім'я файлу.
користувач3439894

Вибачте, я оновив код ще раз, щоб видалити непотрібне popdта виправити смертельну помилку for i in $bn*.zip; do, яка мала бути for i in $bn *.zip; do. Зверніть увагу на пробіл між $bnі *.zip, він був відсутнім і не повинен був бути. Тому, будь ласка, оновіть його у вашій реалізації, інакше він вмикається, File Name 2.zipколи в basenameньому є пробіл.
користувач3439894

Відповіді:


14

Ось Automator служба 1 , яка стає доступною в Finder , якщо папки обрані і емулює в контекстно-меню Стиснути [п] Елементи команди за винятком того, що створює окремий файл зіп архіву для кожної обраної папки в імені обраної папки . Якщо файл Name.zip Folder Name.zip вже існує, до імені файлу додається " 2"( пробіл 2) , наприклад, Ім'я папки 2.zip . Це забезпечує існуючий файл архіву zipне торкається і ім'я файлу zip-архіву автоматично збільшуватиметься за необхідності.

1 У macOS Mojave та пізніших версіях служба автоматизації називається швидкою дією . Існують також інші незначні відмінності в номенклатурі, але вони повинні бути більш очевидними при порівнянні їх з робочими процесами Mojave Automator до MacOS.

Щоб створити послугу: 1

  1. Відкрийте Automator і виберіть Сервіс 1 або Файл > Створити > Сервіс, якщо Автоматизатор вже відкритий.

  2. Набір послуги беруть вибрані для папок і в до Finder .

  3. Додавання сценарію Run Shell Action , установка Shell: в / бен / Баш і введення Pass: в якості аргументів і додайте наступний код :

    for f in "$@"; do
    
        dn="$(dirname "$f")"
        bn="$(basename "$f")"
    
        cd "$dn" || exit
    
        if [[ ! -e "$bn.zip" ]]; then
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip"
        else
            n=2
            for i in $bn *.zip; do
                if [[ "$bn $n.zip" == "$i" ]]; then
                    n="$(( n + 1 ))"
                fi
            done
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip"
        fi
    
    done
    
    afplay /System/Library/Sounds/Purr.aiff
  4. Збережіть послугу як: Стискайте папки окремо

Щоб скористатися послугою:

У Finder або на робочому столі виберіть декілька папок , потім клацніть правою кнопкою миші та виберіть " Стиснути папки" окремо з-під " Послуги" .

Або вибираючи цільові папки , ви також можете натиснути Finder > Services > Compress Folders окремо на панелі меню .

Там у вас це - спосіб стиснення декількох папок окремо і одночасно за один раз в окремих архівах zip, емуляція того, як Finder створює файл архіву zip. Значення zip-архіву містить збережені вилки ресурсів та метадані HFS у підкаталозі __MACOSX та вбудовує лише джерело імені батьківського каталогу в архів призначення , а не повноцінне ім'я шляху, як при використанні zip(без -j) для створення архіву.

Зображення папок стискання окремо

Стискайте папки окремо - Сервіс автоматизації


Я перевірив і ваше рішення, і @ ababak's. Вони дають точно такий же результат, і абабаків набагато простіше здійснити. Я все одно проголосував за обидва.
турзифер

15

Є альтернативне рішення, яке вбудовано, якщо ви не хочете використовувати Automator і чудово змінюєте налаштування програми Archive Utility.

  1. Відкрийте Archive Utility.app, що знаходиться в / Система / Бібліотека / Основні сервіси / Програми /
  2. Перейдіть у меню Файл> Налаштування
  3. Змініть налаштування "Використовувати формат архіву" на "Zip-архів"
  4. Перетягніть папки в її значок на доці.

приємна річ у цьому варіанті - ви можете встановити параметри Archive Utility.app для переміщення оригіналу у кошик після його закінчення, це не обмежується папками. Чи є спосіб налаштувати службу Automator для відкриття за допомогою Archive Utility.app як сервісу, якщо ви хочете правою кнопкою миші як опцію? Я зіткнувся з обмеженням, оскільки Archive Utility.app не можна вибрати за допомогою дії "Запуск програми".
thepen

@thepen, звичайно, ви можете вибрати утиліту Archive Utility як стартову дію програми. Вам просто потрібно вибрати "Інше ..." і перейти до його місцезнаходження, яке є /System/Library/CoreServices/Applications/(ви можете натиснути Cmd-Shift-G, коли відкриється діалогове вікно вибору файлів, щоб вставити цей шлях для швидкої навігації)
ababak

яка різниця між "архівом" та "zip-архівом"?
user1993

Цей метод набагато простіший робочий процес. Я спробував команду: для елемента в *; зробіть zip "$ {item} .zip" "$ {item}"; зроблено в терміналі, але це не спрацювало правильно. Невідомо, чому, але я не хотів витрачати час, щоб це зрозуміти. Це спрацювало чудово.
ArchonOSX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.