Створення автоматизованої папки HFS + стиснення


17

Я хотів би створити автоматизований спосіб архівації файлів в OS X Lion. Під архівацією я маю на увазі використання функції стиснення HFS + у певній папці, і кожен файл, який я переміщу в цю папку, автоматично стискається. Я думаю використовувати це для архівації великих файлів, які я не використовую часто, але без необхідності створювати стислі архіви вручну та витягувати їх, якщо вони мені потрібні.

Я натрапив на інструмент afsctool ( brew install afsctool), який за допомогою командного рядка може застосувати стиснення HFS + до папки та всіх файлів у ній. Але я вважаю, що це не активує стиснення майбутніх файлів, переміщених у папку.

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

  1. Створіть сценарій, який дозволяє переміщати будь-який файл до певної папки. В ідеалі варіант з назвою Архів доступний за допомогою правої кнопки миші на файл.
  2. Запустіть інструкцію командного рядка afsctool -c <folder>, щоб активувати стиснення всіх нових файлів, щойно переміщених у папку.

У мене немає досвіду використання автоматизатора чи AppleScript, тому я хотів би знати, з чого почати, особливо щодо того, як додати дії до Finder та як запустити інструмент командного рядка зі скрипту.


Оновлення

Посібник @kopischke працює добре. Сам сценарій я створив на основі відповіді @mark, але використовуючи afsctool -c <folder>замість цього ditto. Ось сценарій: Це слід поставити~/Library/Scripts/Folder Action Scripts

on adding folder items to this_folder after receiving these_items
repeat with i from 1 to number of items in these_items
    try
        set this_item to item i of these_items
        tell application "Finder"
            set the file_name to the POSIX path of this_item
        end tell
        set cmd to "/usr/local/bin/afsctool -c " & file_name
        do shell script cmd
    on error the error_message number the error_number
        display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1

    end try
end repeat
end adding folder items to

Оскільки afsctool у MobileMe більше не доступний, у GitHub наразі діє diimdeep / afsctool, на даний момент 1.6.4.

Також afsctool в MacPorts, де вони знають про проблему MobileMe, але, можливо, не знають джерела в GitHub.


Приємне запитання. Яких показників стиснення можна очікувати від цього?
n1000

Відповіді:


6

Є дві частини відповіді на ваше запитання.

  1. Як додати пункт контекстного меню Finder до файлів «Архів»: цього легко досягти, створивши службу Automator (Mac OS X Automation має хороший огляд того, що можуть робити служби Automator, представлені в OS X 10.6):

    • Запустіть Automator, виберіть "Сервіс", коли буде запропоновано тип робочого процесу, який ви бажаєте створити.
    • У спадному меню "Служба отримує" виберіть "Файли чи папки" (приблизні переклади - я в німецькій системі). За бажанням встановіть спальний "в" вниз на "Finder".
    • Додайте дію "Отримати вибрані елементи пошуку".
    • Додайте дії "Перемістити елементи пошуку" нижче цього та встановіть їх у свою цільову папку.
    • Збережіть вашу послугу у розташуванні за замовчуванням ( ~/Library/Services) як "Архів".

    тепер у вас є нове меню служби та запис контекстного меню (залежно від кількості активних служб: або на першому рівні меню, або в підменю "Послуги") під назвою "Архів", який перемістить вибраний файл або папку до вашої цілі папку.

  2. Як автоматизувати HFS + стиснення файлів, доданих до цільової папки: існує кілька способів цього досягти. Звичайно, можна просто додати цей крок до служби архівування. Недоліком такого підходу є те, що ніяке стиснення не застосовуватиметься, якщо файли чи папки, коли-небудь додані до папки поза службою, звичайно. Кращим підходом було б, щоб все в папці стискалося автоматично, не покладаючись на вектор введення чи взаємодію з користувачем.

    Один із способів - як запустити утиліту стиснення щоразу, коли файл або папку додаються до переглянутої папки:

    • спосіб запуску утиліти оболонки в AppleScript - do shell scriptкоманда - дивіться зв'язану документацію;
    • вбудованим способом використання подій файлової системи в AppleScript є використання папових дій , які викликають AppleScripts при змінах у переглянутій папці. На те, на які події реагує сценарій, визначається самим сценарієм через обробники, які він надає (наприклад, сценарій у відповіді Марка має обробник adding folder items- тобто він реагує на щойно додані файли; повну довідку див. У посібнику з мови Applescript ) . Конфігурація дій папок знаходиться в меню служб папок у Finder (також у контекстному меню).
    • альтернатива Folder Actions є турбонаддувом - Hazel Пола Кіма (комерційне програмне забезпечення), що додає обробку, засновану на правилах, і безліч критеріїв для обробки подій файлової системи, що виходять далеко за рамки того, що можна досягти за допомогою простих дій з папками - ви можете розглянути Hazel, якщо ви плануйте робити більш чи більш складні речі відповідно до того, що ви зараз плануєте.

    Альтернативою цілому підходу до сценаріїв є використання кластерів LateNiteSoft's - іншого комерційного програмного забезпечення, яке не робить нічого, крім того, що автоматично застосовує (і повторно застосовує, де потрібно) компресію HFS + до вмісту переглядаються папок.


Дякую за вашу відповідь. Я спробую варіант запустити AppleScript як папку. Мені відомо про кластери, і те, що я намагаюся досягти, - це саме те (Кластери бідної людини);)
Бож

@williamvoor: Радий, якщо можна допомогти. Тоді ви не проти прийняти відповідь? Ось кнопка галочки :).
kopischke

Рішення сценарію дій папки працює. Сам сценарій я вставив на запитання.
Boj

5

@williamvoor: Сценарій не працює з файловими шляхами, які містять пробіли, оскільки set the file_name to the POSIX path of this_itemне виходить належним чином. Виправте відповідний рядок свого коду до цього:

set cmd to "/Users/sn/bin/bin/afsctool -c \"" & file_name & "\""

Пояснення : аргумент файлу імені afcstool оточений лапками, які самі в коді AppleScript виходять з метою правильної передачі в середовище командного рядка.

Мета-тема : Оскільки мені не вистачає репутаційних балів, я не міг коментувати відповідну позицію (= до власної публікації @williamvoor), тому я публікую її як власну відповідь і прошу змінити зміну коду на свою посаду, і дайте мені великі пальці вгору, щоб я здобув достатню репутацію, що дозволяє мені безпосередньо коментувати в майбутньому. Спасибі!

Після цього я або адміністратор можу видалити свою посаду.


3

Цей потік дає яблучний сценарій для використання в якості папки, яка стисне файли під час їх додавання

on adding folder items to thisFolder after receiving theseItems
    set destinationPath to "/POSIX path/to/destination/folder"
    repeat with thisItem in theseItems
        set cmd to "ditto --hfsCompression " & quoted form of POSIX path of thisItem & " " & destinationPath
        do shell script cmd with administrator privileges
    end repeat
end adding folder items to

Не знав про --hfsCompressionваріант у ditto- хороший! Але ваша відповідь не стосується питання ОП щодо інтеграції рухомого сценарію в Finder, він переміщує файли, випущені в папку архіву, до іншої папки (що, я думаю, було б ще одним перенаправленням, ніж планував зробити ОП), і він попросить підтвердити автентифікацію щоразу (дратує в контексті автоматизації).
kopischke

0

Скупчення

… Користується технологією стиснення файлів у гірському Леві, Леві та Сніжному Леопарді…

Стиснення папки MoreSpace

… Стиснення HFS + найкращим чином впливає на нескладені формати файлів, такі як текстові документи та документи, бази даних та поштові скриньки. Типовий розмір поштової скриньки може бути зменшений до 50%. …

Перевага

З цих двох, я вважаю Кластери більш зрілими та легшими у використанні - можливо, краще підходять для цього питання.


Продовжуйте обережно

У крайньому випадку беззвучна втрата даних може статися при сторонніх використання AppleFSCompression. З того, що я можу сказати, це помилка в ОС, і може виникнути лише там, де є надзвичайний брак вільного місця. Я буду годувати помилку Apple.


1
Це, здається, зараз було припинено.
EpicVoyage
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.