自動化されたHFS +圧縮フォルダーの作成


17

OS X Lionでファイルをアーカイブするための自動化された方法を設定したいと思います。アーカイブとは、特定のフォルダーでHFS +圧縮機能を使用し、このフォルダーに移動するすべてのファイルを自動的に圧縮することを意味します。頻繁に使用しない大きなファイルをアーカイブするためにこれを使用することを考えていますが、圧縮アーカイブを手動で作成し、必要に応じてそれらを抽出する必要はありません。

ツールafsctoolbrew install afsctool)に出会いました。このツールは、コマンドラインを介して、フォルダーとその中のすべてのファイルにHFS +圧縮を適用できます。ただし、フォルダに移動さ​​れた将来のファイルの圧縮はアクティブ化されないと考えています。

ファイルを手動で移動し、コマンドライン命令を繰り返し実行するのは不便です。したがって、オートマトン/ AppleScriptを使用して2つのステップでこれを実行する必要があると推測しています:

  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

MobileMeのafsctoolは使用できなくなったため、GitHubにはdiimdeep / afsctoolがあります(現在は1.6.4)。

また、MacPortsのafsctoolでは、MobileMeの問題は認識していますが、GitHubのソースを認識していない可能性があります。


いい質問ですね。これからどのような圧縮率が期待できますか?
n1000

回答:


6

質問への回答には2つの部分があります。

  1. Finderコンテキストメニュー項目を「アーカイブ」ファイルに追加する方法:これは、Automatorサービスを作成することで簡単に実現できます(Mac OS X Automationには OS X 10.6で導入されたAutomatorサービスでできることの概要があります):

    • Automatorを起動し、作成するワークフローの種類のプロンプトが表示されたら「サービス」を選択します。
    • [サービスの受信]ドロップダウンで[ファイルまたはフォルダー]を選択します(おおよその翻訳-ドイツのシステムを使用しています)。オプションで、「in」ドロップダウンを「Finder」に設定します。
    • 「選択したFinderアイテムを取得」アクションを追加します。
    • その下に「Finderアイテムの移動」アクションを追加し、ターゲットフォルダーに設定します。
    • サービスをデフォルトの場所(~/Library/Services)に「アーカイブ」として保存します。

    これで、選択したファイルまたはフォルダをターゲットに移動する「アーカイブ」と呼ばれる新しいサービスメニューコンテキストメニューエントリ(アクティブなサービスの数に応じて:最初のメニューレベルまたは「サービス」サブメニュー)があります。フォルダ。

  2. ターゲットフォルダーに追加されたファイルのHFS +圧縮を自動化する方法それを実現する方法はいくつかあります。もちろん、そのステップをアーカイブサービスに追加するだけです。このアプローチの欠点は、ファイルまたはフォルダーがサービス外のフォルダーに追加された場合、圧縮が適用されないことです。より良い方法は、フォルダー内のすべてを、エントリーベクトルやユーザーの操作に依存せずに自動的に圧縮することです。

    1つの方法は、発見したように、ファイルまたはフォルダーが監視フォルダーに追加されるたびに圧縮ユーティリティを実行することです。

    • AppleScriptでシェルユーティリティを起動する方法はdo shell scriptコマンドです。リンクされたドキュメントを参照してください。
    • AppleScriptのファイルシステムイベントを活用する組み込みの方法は、Folder Actionsを使用することです。このアクションは、監視フォルダーの変更でAppleScriptを呼び出します。スクリプトが反応するイベントは、それが提供するハンドラーを介して、スクリプト自体によって定義されます(たとえば、Markの回答のスクリプトにはハンドラーがありadding folder itemsます。つまり、新しく追加されたファイルに反応します。詳細については、Applescript Language Guideを参照してください) 。フォルダーアクションの構成は、Finderのフォルダーのサービスメニューにあります(コンテキストメニューにもあります)。
    • フォルダーアクションに代わるターボチャージは、ポールキムヘイゼル(市販ソフトウェア)です。これは、ルールベースの処理と、単純なフォルダーアクションで達成できるものをはるかに超えるファイルシステムイベント処理の多数の基準を追加します。現在計画していることに沿って、より複雑な作業を行うことを計画します。

    スクリプティングアプローチ全体の代替として、LateNiteSoftのクラスターを使用します。これは、監視フォルダーのコンテンツにHFS +圧縮を自動的に適用(および必要に応じて再適用)するだけの別の商用ソフトウェアです。


ご回答有難うございます。AppleScriptをフォルダーアクションとして実行するオプションを試します。私はクラスターに気付いており、私が達成しようとしているのはまさにそれです(貧乏人のクラスター);)
Boj

@williamvoor:助けていただければ幸いです。では、答えを受け入れてもらえますか?それがチェックマークボタンです:)。
-kopischke

フォルダーアクションスクリプトソリューションが機能します。スクリプト自体は質問に貼り付けました。
ボイ

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のfile_name引数は引用符で囲まれています。引用符はAppleScriptコード内でエスケープされており、コマンドライン環境に正しく引き渡されます。

メタトピック:評価ポイントが不足しているため、適切な位置(@williamvoorの自身の投稿)にコメントできなかったため、独自の回答として投稿し、コードの変更を投稿に編集するようお願いします。親指を立てて、十分な評判を得て、将来的に直接コメントできるようにします。ありがとう!

その後、私と管理者は私の投稿を削除できます。


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-良いもの!しかし、あなたの答えは、移動スクリプトをFinderに統合することに関するOPの質問に対処するものではなく、アーカイブフォルダにドロップされたファイルを別のフォルダに移動し(OPが計画していたよりも1つのリダイレクトになると思います)、認証を求めます毎回(自動化のコンテキストで迷惑です)。
-kopischke

0

クラスター

…Mountain Lion、Lion、Snow Leopardのファイル圧縮技術を活用しています…

MoreSpaceフォルダー圧縮

…HFS +圧縮は、テキストおよびデータドキュメント、データベース、メールボックスなどの非圧縮ファイル形式に最適な効果をもたらします。通常のメールメールボックスのサイズは、最大50%削減できます。…

好み

この2つのうち、クラスターがより成熟し、使いやすいことがわかりました。おそらくこの質問により適しています。


注意して進めてください

エッジケースでは、サードパーティのAppleFSCompressionの使用でサイレントデータ損失が発生する場合があります。これはOSのバグであり、空き領域が非常に不足している場合にのみ発生する可能性があります。バグをAppleに報告します。


1
これらは両方とも現在中止されているようです。
EpicVoyage
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.