Создание автоматизированной сжатой папки HFS +

16

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

Я наткнулся на инструмент afsctool ( brew install afsctool), который может через командную строку применять сжатие HFS + к папке и всем файлам в ней. Но я считаю, что это не активирует сжатие будущих файлов, перемещенных в папку.

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

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

У меня нет опыта использования Automator или 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.

Также в MacPorts, где они знают о проблеме MobileMe, но, возможно, не знают об источнике на GitHub.

Boj
источник
Хороший вопрос Какие степени сжатия можно ожидать от этого?
n1000

Ответы:

5

Ответ на ваш вопрос состоит из двух частей.

  1. Как добавить пункт контекстного меню Finder в «Архивные» файлы: этого легко достичь, создав службу Automator (Mac OS X Automation имеет хороший обзор того, что могут делать службы Automator, представленные в OS X 10.6):

    • Запустите Automator, выберите «Сервис», когда будет предложено указать тип рабочего процесса, который вы хотите создать.
    • Выберите «Файлы или папки» в выпадающем списке «Служба получает» (приблизительные переводы - я в немецкой системе). При желании, установите «in» в раскрывающемся списке «Finder».
    • Добавьте действие «Получить выбранные элементы поиска».
    • Добавьте ниже действия «Переместить элементы поиска» и установите их в вашей целевой папке.
    • Сохраните ваш сервис в расположении по умолчанию ( ~/Library/Services) как «Архив».

    Теперь у вас есть новое сервисное меню и пункт контекстного меню (в зависимости от количества активных сервисов: либо на первом уровне меню, либо в подменю «Сервисы») под названием «Архив», который переместит выбранный файл или папку к вашей цели. папка.

  2. Как автоматизировать сжатие файлов HFS +, добавленных в целевую папку: для этого есть несколько способов. Конечно, вы можете просто добавить этот шаг в службу архивации. Недостатком этого подхода является то, что сжатие не будет применяться, если, конечно, файлы или папки будут добавлены в папку вне службы. Лучшим подходом было бы, чтобы все в папке сжималось автоматически, не полагаясь на вектор ввода или взаимодействие с пользователем.

    Как вы обнаружили, один из способов - запускать утилиту сжатия при каждом добавлении файла или папки в отслеживаемую папку:

    • способ запуска утилиты оболочки в AppleScript - do shell scriptкоманда - см. связанную документацию;
    • встроенный способ использовать события файловой системы в AppleScript - это использовать действия с папками , которые вызывают AppleScripts для изменений в отслеживаемой папке. События, на которые реагирует скрипт, определяются самим скриптом через предоставляемые им обработчики (например, у скрипта в ответе Марка есть обработчик для adding folder items- то есть он реагирует на вновь добавленные файлы; полный справочник см. В Руководстве по языку Applescript ). , Конфигурация действий с папками находится в сервисном меню папок в Finder (тоже в контекстном меню).
    • Альтернативой действиям папки с турбонаддувом является Hazel Пола Кима (коммерческое программное обеспечение), который добавляет обработку на основе правил и множество критериев обработки событий в файловой системе, которые выходят далеко за пределы того, что вы можете достичь с помощью простых действий с папками - вы можете захотеть исследовать Hazel, если вы планируйте делать более или более сложные вещи в соответствии с тем, что вы планируете сейчас.

    Альтернатива всему скриптового подход использует LateNiteSoft в Кластеры - другое коммерческое программное обеспечение, который ничего не делает , но автоматически применять (и повторно применять, в случае необходимости) HFS + сжатие содержимого отслеживаемых папок.

Копишке
источник
Спасибо за Ваш ответ. Я попробую вариант запуска AppleScript в качестве действия папки. Я знаю о кластерах, и я пытаюсь достичь именно этого (кластеры бедняков);)
Boj
@williamvoor: Рад, что мог помочь. Вы не против принять ответ? Это кнопка галочки :).
копишке
Решение сценария действия папки работает. Сам скрипт я наклеил на вопрос.
Бой
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), поэтому я публикую его как собственный ответ и прошу вас отредактировать изменение кода в своем сообщении, и побалуйте меня, чтобы я приобрел достаточно репутации, чтобы я мог прямо прокомментировать в будущем. Спасибо!

После этого я или администратор могут удалить мой пост.

PORG
источник
3

Этот поток дает appleScript для использования в качестве действия папки, которое будет сжимать файлы по мере их добавления

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- хороший! Но ваш ответ не отвечает на вопрос OP об интеграции движущегося скрипта в Finder, он перемещает файлы, сброшенные в папку архива, в другую папку (что, я думаю, было бы более перенаправлением, чем планировалось OP), и запрашивает аутентификацию. каждый раз (раздражает в контексте автоматизации).
копишке
0

Кластеры

… Использует технологию сжатия файлов в Mountain Lion, Lion и Snow Leopard…

Сжатие папок MoreSpace

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

предпочтение

Из этих двух я считаю кластеры более зрелыми и более простыми в использовании - возможно, лучше подходят для этого вопроса.


Действовать с осторожностью

В крайнем случае тихая потеря данных может произойти при использовании AppleFSCompression третьей стороной. Из того, что я могу сказать, это ошибка в ОС, которая может возникать только в случае чрезвычайной нехватки свободного места. Я передам ошибку Apple.

Грэм Перрин
источник
1
Оба из них, кажется, были прекращены сейчас.
EpicVoyage