Criando uma pasta compactada HFS + automatizada

17

Gostaria de configurar uma maneira automatizada de arquivar arquivos no OS X Lion. Ao arquivar, quero dizer usando o recurso de compactação HFS + em uma pasta específica e fazer com que todos os arquivos que eu movo para essa pasta sejam compactados automaticamente. Estou pensando em usar isso para arquivar arquivos grandes que não uso com frequência, mas sem precisar criar manualmente arquivos compactados e extraí-los caso precise deles.

Encontrei a ferramenta afsctool ( brew install afsctool), que pode, via linha de comando, aplicar a compactação HFS + a uma pasta e a todos os arquivos nela. Mas acredito que não ativa a compactação de arquivos futuros movidos para a pasta.

Mover arquivos manualmente e executar uma instrução de linha de comando repetidamente é inconveniente. Portanto, acho que precisaria usar o automator / AppleScript para executar isso em duas etapas:

  1. Crie um script que permita mover qualquer arquivo para uma pasta específica. Idealmente, uma opção chamada Archive acessível através do botão direito do mouse no arquivo.
  2. Execute uma instrução de linha de comando afsctool -c <folder>para ativar a compactação em todos os novos arquivos recém-movidos para a pasta.

Não tenho experiência no uso do automator ou do AppleScript, portanto, gostaria de saber por onde começar, principalmente sobre como adicionar ações ao Finder e como executar uma ferramenta de linha de comando a partir de um script.


Atualizações

O guia @kopischke funciona bem. O script em si, eu fiz com base na resposta de @mark, mas usando afsctool -c <folder>, em vez de ditto. Aqui está o script: deve ser colocado em~/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

Como o afsctool no MobileMe não está mais disponível, há diimdeep / afsctool no GitHub, atualmente 1.6.4.

Também o afsctool no MacPorts, onde eles conhecem o problema do MobileMe, mas talvez não tenham conhecimento da fonte no GitHub.

Boj
fonte
Boa pergunta. Quais taxas de compactação podem ser esperadas com isso?
N1000

Respostas:

6

Existem duas partes na resposta à sua pergunta.

  1. Como adicionar um item de menu de contexto do Finder aos arquivos "Arquivar": é fácil obter isso criando um Serviço de Automator (o Mac OS X Automation tem uma boa visão geral do que os serviços do Automator introduzidos no OS X 10.6 podem fazer):

    • Inicie o Automator, escolha "Serviço" quando solicitado para o tipo de fluxo de trabalho que você deseja criar.
    • Escolha "Arquivos ou pastas" no menu suspenso "Serviço recebe" (traduções aproximadas - estou em um sistema em alemão). Opcionalmente, defina o menu suspenso "in" como "Finder".
    • Adicione uma ação "Obter itens do localizador selecionado".
    • Adicione uma ação "Mover itens do localizador" abaixo disso e defina-a na sua pasta de destino.
    • Salve seu serviço no local padrão ( ~/Library/Services) como “Arquivar”.

    agora você tem um novo menu de serviço e uma entrada no menu de contexto (dependendo do número de serviços ativos: no primeiro nível do menu ou no submenu "Serviços") chamado "Arquivo" que moverá o arquivo ou a pasta selecionada para o seu destino pasta.

  2. Como automatizar a compactação de arquivos HFS + adicionados à sua pasta de destino: existem várias maneiras de conseguir isso. Obviamente, você pode simplesmente adicionar essa etapa ao seu serviço de arquivamento. A desvantagem dessa abordagem é que nenhuma compactação será aplicada se arquivos ou pastas forem adicionados à pasta fora do serviço, é claro. Uma abordagem melhor seria compactar tudo na pasta automaticamente, sem depender do vetor de entrada ou da interação do usuário.

    Uma maneira é, como você descobriu, executar um utilitário de compactação sempre que um arquivo ou pasta for adicionado à sua pasta monitorada:

    • a maneira de iniciar um utilitário de shell no AppleScript é o do shell scriptcomando - consulte a documentação vinculada;
    • a maneira integrada de aproveitar os eventos do sistema de arquivos em um AppleScript é usar Ações de Pasta , que chamam AppleScripts nas alterações em uma pasta monitorada. Os eventos aos quais o script reage são definidos pelo próprio script, por meio dos manipuladores que ele fornece (por exemplo, o script na resposta de Mark possui um manipulador adding folder items- o que significa que ele reage aos arquivos adicionados recentemente; consulte o Applescript Language Guide para obter a referência completa ) . A configuração de Ações da Pasta é encontrada no menu de serviços das pastas no Finder (também no menu de contexto).
    • uma alternativa turbo às ações de pasta é o Hazel de Paul Kim (software comercial), que adiciona processamento baseado em regras e uma infinidade de critérios para manipulação de eventos do sistema de arquivos que vão muito além do que você pode conseguir com ações simples de pasta - você pode querer investigar o Hazel se quiser planeje fazer coisas mais ou mais complexas de acordo com o que você está planejando agora.

    Uma alternativa para toda a abordagem de script é usar os Clusters do LateNiteSoft - outro software comercial que não faz nada além de aplicar automaticamente (e reaplicar, quando necessário) a compactação HFS + ao conteúdo das pastas monitoradas.

kopischke
fonte
Obrigado pela sua resposta. Vou tentar a opção de executar um AppleScript como uma ação de pasta. Eu estou ciente de Clusters, eo que estou tentando alcançar é exatamente isso (Clusters de um homem pobre);)
Boj
@ williamvoor: Fico feliz que poderia ajudar. Você se importaria de aceitar a resposta, então? Esse é o botão de marca de seleção :).
Kopischke
A solução de script de ação da pasta funciona. O script em si colei sobre a questão.
Boj
5

@ williamvoor: o script falha com caminhos de arquivo que contêm espaços, pois set the file_name to the POSIX path of this_itemnão escapa corretamente. Corrija a linha apropriada do seu código para isso:

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

Explicação : O argumento file_name do afcstool é cercado por aspas, que no código AppleScript são escapadas para serem corretamente entregues ao ambiente da linha de comandos.

Meta-tópico : como não tenho pontos de reputação, não pude comentar na posição apropriada (= na própria postagem de @williamvoor), portanto, eu a envio como uma resposta própria e solicite que você edite a alteração de código em sua postagem, e me dê um joinha, para que eu ganhe reputação suficiente, o que me permite comentar diretamente no futuro. Obrigado!

Depois disso, eu ou admin poderíamos excluir minha postagem.

porg
fonte
3

Esse segmento fornece um AppleScript para usar como uma ação de Pasta, que comprimirá os arquivos à medida que forem adicionados

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
user151019
fonte
Não sabia sobre a --hfsCompressionopção ditto- boa! Mas sua resposta não aborda a pergunta do OP sobre a integração de um script em movimento no Finder, move os arquivos soltos na pasta de arquivamento para outra pasta (que eu acho que seria mais um redirecionamento do que o OP estava planejando) e solicitará autenticação sempre (irritante em um contexto de automação).
Kopischke
0

Clusters

… Tira proveito da tecnologia de compactação de arquivos no Mountain Lion, Lion e Snow Leopard…

Compressão de pasta MoreSpace

… A compactação HFS + tem o melhor efeito em formatos de arquivos não compactados, como documentos de texto e dados, bancos de dados e caixas de correio. Um tamanho típico de caixa de correio pode ser reduzido em até 50%. ...

Preferência

Desses dois, acho que os Clusters são mais maduros e mais fáceis de usar - provavelmente um melhor ajuste para essa pergunta.


Prossiga com cuidado

Em um caso extremo, o dataloss silencioso pode ocorrer com usos de AppleFSCompression de terceiros. Pelo que posso dizer, é um bug no sistema operacional e pode ocorrer apenas quando há uma extraordinária falta de espaço livre. Vou alimentar o bug para a Apple.

Graham Perrin
fonte
1
Ambos parecem ter sido descontinuados agora.
EpicVoyage