17 votes

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

Je voudrais mettre en place une méthode automatisée d'archivage des fichiers dans OS X Lion. Par archivage, j'entends l'utilisation de la fonction de compression HFS+ sur un dossier spécifique, et faire en sorte que chaque fichier que je déplace dans ce dossier soit automatiquement compressé. Je pense utiliser cette fonction pour archiver des fichiers volumineux que je n'utilise pas souvent, sans avoir à créer manuellement des archives compressées et à devoir les extraire en cas de 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 dans le dossier.

Déplacer des fichiers manuellement et exécuter une instruction en ligne de commande à plusieurs reprises est peu pratique. Je suppose donc que je devrais utiliser Automator/AppleScript pour exécuter cette opération en deux étapes :

  1. Créer un script qui permet de déplacer n'importe quel fichier vers un dossier spécifique. Idéalement une option nommée Archive accessible par un clic droit sur le fichier.
  2. Exécuter une instruction de ligne de commande afsctool -c <folder> pour activer la compression sur tous les nouveaux fichiers qui viennent d'être déplacés dans le dossier.

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


Mises à jour

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

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

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

0 votes

Bonne question. Quels taux de compression peut-on attendre de ce système ?

6voto

Ryan Spears Points 1524

La réponse à votre question comporte deux parties.

  1. Comment ajouter un élément de menu contextuel du Finder pour les fichiers "Archive" : cela est facile à réaliser en créant un Automator Service (Mac OS X Automation a un bon aperçu de ce que peuvent faire les services Automator introduits dans OS X 10.6) :

    • 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 le menu déroulant "Service reçu" (traductions approximatives - je suis sur un système allemand). En option, réglez le menu déroulant "dans" sur "Finder".
    • Ajouter une action "Get Selected Finder Items".
    • Ajoutez une action "Déplacer les éléments du Finder" en dessous et définissez-la sur votre dossier cible.
    • Enregistrez votre service dans l'emplacement par défaut ( ~/Library/Services ) comme "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 du menu, soit dans le sous-menu "Services") appelée "Archive" qui déplacera le fichier ou le dossier sélectionné vers votre dossier cible.

  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 consisterait à faire en sorte que tout ce qui se trouve dans le dossier soit compressé automatiquement, sans dépendre du vecteur d'entrée ou de l'interaction de l'utilisateur.

    L'une des solutions consiste, comme vous l'avez découvert, à faire exécuter un utilitaire de compression chaque fois qu'un fichier ou un dossier est ajouté à votre dossier à surveiller :

    • la manière de lancer un utilitaire shell dans AppleScript est la suivante do shell script commande - voir la documentation liée ;
    • la façon intégrée de tirer parti des événements du système de fichiers dans un AppleScript est d'utiliser la fonction Actions des dossiers qui appellent des AppleScripts lors de changements dans un dossier surveillé. Les événements auxquels le script réagit sont définis par le script lui-même, par l'intermédiaire des gestionnaires qu'il fournit (par exemple, le script en La réponse de Mark a un gestionnaire pour adding folder items - ce qui signifie qu'il réagit aux fichiers nouvellement ajoutés ; voir le guide du langage Applescript pour les informations suivantes la référence complète ). La configuration des actions sur les dossiers se trouve dans le menu des services des dossiers dans le Finder (dans le menu contextuel également).
    • une alternative turbulente à Folder Actions est Paul Kim's Hazel (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 de simples Folder Actions - vous pourriez vouloir examiner 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 à l'approche complète par script est l'utilisation de LateNiteSoft Clusters - un autre logiciel commercial, qui ne fait rien d'autre qu'appliquer automatiquement (et réappliquer, le cas échéant) la compression HFS+ au contenu des dossiers surveillés.

0 votes

Merci pour votre réponse. Je vais essayer l'option d'exécuter un AppleScript comme une action de dossier. Je suis conscient de l'existence des clusters, et ce que j'essaie de réaliser est exactement cela (un cluster du pauvre) ;)

0 votes

@williamvoor : Content d'avoir pu aider. Pourriez-vous accepter la réponse, alors ? C'est le bouton de cochage :).

0 votes

La solution du dossier action script fonctionne. Le script lui-même, je l'ai collé sur la question.

5voto

porg Points 478

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

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

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

Méta-sujet : Comme je manque de points de réputation, je n'ai pas pu commenter à l'endroit approprié (= au propre message de @williamvoor), donc je le poste comme une réponse propre, et vous demande d'éditer le changement de code dans votre message, et de me donner un pouce en l'air, afin que je gagne assez de réputation, me permettant de commenter directement à l'avenir. Merci !

Après cela, moi ou un administrateur pouvons supprimer mon message.

3voto

yoliho Points 340

Este filetage donne un applescript à utiliser comme action de dossier qui comprimera 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

0 votes

Je ne savais pas pour le --hfsCompression option dans ditto - Bien joué ! Mais votre réponse ne répond pas à la question du PO sur l'intégration d'un script mobile dans le Finder, il 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 ce que le PO prévoyait de faire) et il demandera une authentification à chaque fois (ennuyeux dans un contexte d'automatisation).

0voto

Graham Perrin Points 7373

Clusters

tire parti de la technologie de compression des 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 de texte et de données, les bases de données et les boîtes aux lettres. La taille d'une boîte aux lettres électronique typique peut être réduite jusqu'à 50 %.

Préférence

De ces deux, je trouve que Clusters est plus mature et plus facile à utiliser - probablement une meilleure solution pour cette question.


Procédez avec prudence

Dans un cas limite, une perte de données silencieuse peut se produire avec des utilisations tierces d'AppleFSCompression. D'après ce que je sais, il s'agit d'un bogue dans le système d'exploitation, qui ne peut se produire que lorsqu'il y a un manque extraordinaire d'espace libre. Je vais faire part de ce bogue à Apple.

1 votes

Ces deux produits semblent avoir été abandonnés.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X