Création d'un dossier compressé HFS + automatisé

17

Je voudrais mettre en place une méthode automatisée d'archivage des fichiers dans OS X Lion. Par archivage, je veux dire en utilisant la fonction de compression HFS + sur un dossier spécifique et que chaque fichier que je déplace dans ce dossier soit automatiquement compressé. Je pense à l'utiliser pour archiver de gros fichiers que je n'utilise pas souvent, mais sans avoir à créer manuellement des archives compressées et à les extraire au cas où j'en aurais besoin.

Je suis tombé sur l'outil afsctool ( brew install afsctool), qui peut, via la ligne de commande, appliquer la compression HFS + à un dossier et à tous les fichiers qu'il contient . Mais je crois qu'il n'active pas la compression des futurs fichiers déplacés vers le dossier.

Le déplacement manuel de fichiers et l'exécution répétée d'une instruction de ligne de commande ne sont pas pratiques. Par conséquent, je suppose que j'aurais besoin d'utiliser un automate / AppleScript pour exécuter cela en deux étapes:

  1. Créez un script qui permet de déplacer n'importe quel fichier vers un dossier spécifique. Idéalement, une option nommée Archive accessible via un clic droit sur le fichier.
  2. Exécutez une instruction de ligne de commande afsctool -c <folder>pour activer la compression sur tous les nouveaux fichiers que vous venez de déplacer dans le dossier.

Je n'ai aucune expérience de l'automatisation ou d'AppleScript, je voudrais donc savoir par où commencer, en particulier en ce qui concerne la façon d'ajouter des actions au Finder et comment exécuter un outil de ligne de commande à partir d'un script.


Mises à jour

Le guide @kopischke fonctionne bien. Le script lui-même, j'ai fait sur la base de la réponse de @mark, mais en utilisant afsctool -c <folder>, au lieu de ditto. Voici le script: il devrait être mis~/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

Comme afsctool chez MobileMe n'est plus disponible, il y a diimdeep / afsctool chez GitHub, actuellement 1.6.4.

Aussi afsctool dans MacPorts où ils sont au courant du problème MobileMe mais peut-être pas au courant de la source sur GitHub.

Boj
la source
Bonne question. Quels taux de compression peut-on en attendre?
N1000

Réponses:

6

La réponse à votre question comporte deux parties.

  1. Comment ajouter un élément de menu contextuel du Finder aux fichiers «Archive»: cela est facile à réaliser en créant un service Automator (Mac OS X Automation a une bonne vue d' ensemble de ce que les services Automator introduits dans OS X 10.6 peuvent faire):

    • Lancez Automator, choisissez «Service» lorsque vous êtes invité à indiquer le type de flux de travail que vous souhaitez créer.
    • Choisissez «Fichiers ou dossiers» dans la liste déroulante «Le service reçoit» (traductions approximatives - je suis sur un système allemand). Facultativement, définissez le menu déroulant «in» sur «Finder».
    • Ajoutez une action «Obtenir les éléments du Finder sélectionnés».
    • Ajoutez une action «Déplacer les éléments du Finder» en dessous et définissez-la dans votre dossier cible.
    • Enregistrez votre service à l'emplacement par défaut ( ~/Library/Services) sous «Archive».

    vous avez maintenant un nouveau menu de service et une entrée de menu contextuel (en fonction du nombre de services actifs: soit au premier niveau de menu, soit dans le sous-menu "Services") appelé "Archive" qui déplacera le fichier ou le dossier sélectionné vers votre cible dossier.

  2. Comment automatiser la compression HFS + des fichiers ajoutés à votre dossier cible: il existe plusieurs façons d'y parvenir. Vous pouvez bien sûr simplement ajouter cette étape à votre service d'archivage. L'inconvénient de cette approche est qu'aucune compression ne sera appliquée si des fichiers ou des dossiers sont ajoutés au dossier en dehors du service, bien sûr. Une meilleure approche serait de tout compresser automatiquement dans le dossier, sans dépendre du vecteur d'entrée ou de l'interaction de l'utilisateur.

    Une façon consiste, comme vous l'avez découvert, à exécuter un utilitaire de compression chaque fois qu'un fichier ou un dossier est ajouté à votre dossier surveillé:

    • la façon de lancer un utilitaire shell dans AppleScript est la do shell scriptcommande - voir la documentation liée;
    • la manière intégrée de tirer parti des événements du système de fichiers dans un AppleScript consiste à utiliser les actions de dossier , qui appellent AppleScripts sur les modifications dans un dossier surveillé. Les événements auxquels le script réagit sont définis par le script lui-même, via les gestionnaires qu'il fournit (par exemple, le script dans la réponse de Mark a un gestionnaire adding folder items- ce qui signifie qu'il réagit aux fichiers nouvellement ajoutés; voir le Guide du langage Applescript pour la référence complète ) . La configuration des actions sur les dossiers se trouve dans le menu des services des dossiers du Finder (dans le menu contextuel également).
    • une alternative turbocompressée aux actions de dossier est Hazel de Paul Kim (logiciel commercial), qui ajoute un traitement basé sur des règles et une pléthore de critères pour la gestion des événements du système de fichiers qui vont bien au-delà de ce que vous pouvez réaliser avec des actions de dossier simples - vous voudrez peut-être enquêter sur Hazel si vous prévoyez de faire des choses plus ou plus complexes dans le sens de ce que vous prévoyez maintenant.

    Une alternative à toute l'approche de script consiste à utiliser les clusters de LateNiteSoft - un autre logiciel commercial, qui ne fait qu'appliquer automatiquement (et réappliquer , si nécessaire) la compression HFS + au contenu des dossiers surveillés.

kopischke
la source
Merci pour votre réponse. Je vais essayer l'option d'exécuter un AppleScript en tant qu'action de dossier. Je connais les Clusters, et ce que j'essaie d'atteindre, c'est exactement cela (les Clusters d'un pauvre);)
Boj
@williamvoor: Content si cela pouvait aider. Pourriez-vous accepter la réponse, alors? C'est le bouton de coche :).
kopischke
La solution de script d'action de dossier fonctionne. Le script lui-même que j'ai collé sur la question.
Boj
5

@williamvoor: Le script échoue avec les chemins de fichier qui contiennent des espaces, car set the file_name to the POSIX path of this_itemil ne s'échappe pas correctement. Corrigez la ligne appropriée de votre code à ceci:

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

Explication : l'argument nom_fichier d'afcstool est entouré de guillemets, qui eux-mêmes dans le code AppleScript sont échappés afin d'être correctement transmis à l'environnement de ligne de commande.

Méta-sujet : Comme je manque de points de réputation, je ne pouvais pas commenter à la position appropriée (= au propre message de @williamvoor), donc je le poste comme une propre réponse et je vous demande de modifier le changement de code dans votre message, et donnez-moi un coup de pouce, afin que je gagne assez de réputation, me permettant de commenter directement à l'avenir. Merci!

Après cela, moi ou l'administrateur et je pourrais supprimer mon message.

porg
la source
3

Ce fil donne un applescript à utiliser comme une action de dossier qui compressera les fichiers au fur et à mesure qu'ils sont ajoutés

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
la source
Je ne connaissais pas l' --hfsCompressionoption ditto- bonne! Mais votre réponse ne répond pas à la question d'OP concernant l'intégration d'un script mobile dans le Finder, elle déplace les fichiers déposés dans le dossier d'archive vers un autre dossier (ce qui, je pense, serait une redirection de plus que OP prévoyait de le faire) et il demandera l'authentification à chaque fois (ennuyeux dans un contexte d'automatisation).
kopischke
0

Clusters

… Tire parti de la technologie de compression de fichiers de Mountain Lion, Lion et Snow Leopard…

Compression de dossiers MoreSpace

… La compression HFS + a le meilleur effet sur les formats de fichiers non compressés comme les documents texte et données, les bases de données et les boîtes aux lettres. Une taille de boîte aux lettres Mail typique peut être réduite jusqu'à 50%. …

Préférence

De ces deux, je trouve les clusters plus matures et plus faciles à utiliser - probablement un meilleur choix pour cette question.


Procéder avec prudence

Dans un cas de bord, une perte de données silencieuse peut se produire avec des utilisations tierces d'AppleFSCompression. D'après ce que je peux dire, c'est un bug dans le système d'exploitation, et peut se produire uniquement lorsqu'il y a un manque extraordinaire d'espace libre. Je vais transmettre le bug à Apple.

Graham Perrin
la source
1
Ces deux semblent avoir été abandonnées maintenant.
EpicVoyage