创建一个自动的HFS +压缩文件夹


17

我想在OS X Lion中设置一种自动归档文件的方法。存档是指在特定文件夹上使用HFS +压缩功能,并使我移入该文件夹的每个文件都自动压缩。我正在考虑使用它来存档不经常使用的大文件,但是不必手动创建压缩存档,也不必在需要时提取它们。

我遇到了工具afsctoolbrew 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

由于MobileMe的afsctool不再可用,因此GitHub上有diimdeep / afsctool,目前为1.6.4。

也是MacPorts中的afsctool,他们知道MobileMe问题,但可能不知道GitHub上的源。


好问题。由此可以预期得到什么压缩率?
n1000

Answers:


6

问题的答案分为两部分。

  1. 如何将Finder上下文菜单项添加到“存档”文件:通过创建Automator服务很容易实现(Mac OS X Automation 很好地概述了OS X 10.6中引入的Automator服务可以做什么):

    • 启动Automator,在系统提示您选择要创建的工作流程时,选择“服务”。
    • 在“服务接收”下拉菜单中选择“文件或文件夹”(大约翻译-我使用的是德语系统)。(可选)将“输入”下拉列表设置为“查找器”。
    • 添加“获取选定的查找器项目”操作。
    • 在其下面添加“移动查找器项目”操作,并将其设置到目标文件夹。
    • 将服务保存在默认位置(~/Library/Services)作为“存档”。

    现在,您有一个新的服务菜单上下文菜单项(取决于活动服务的数量:在第一个菜单级别或在“服务”子菜单中),称为“存档”,它将选择的文件或文件夹移至目标夹。

  2. 如何自动执行添加到目标文件夹的文件的HFS +压缩:有几种方法可以实现。当然,您可以简单地将该步骤添加到归档服务中。这种方法的缺点是,如果将文件或文件夹添加到服务之外的文件夹中,则不会应用任何压缩。更好的方法是自动压缩文件夹中的所有内容,而无需依赖输入向量或用户交互。

    正如您所发现的,一种方法是每次将文件或文件夹添加到监视的文件夹时都运行压缩实用程序:

    • 在AppleScript中启动shell实用程序的方法是do shell script命令 –请参阅链接的文档;
    • 在AppleScript中利用文件系统事件的一种内置方法是使用Folder Actions,它在监视的文件夹中的更改上调用AppleScripts。脚本会通过其提供的处理程序来定义脚本会对什么事件做出反应(例如,Mark答案中的脚本具有用于处理程序的处理器adding folder items-表示它对新添加的文件做出了响应;有关完整参考,请参阅《 Applescript语言指南》) 。可以在Finder中的文件夹的服务菜单中找到文件夹动作配置(也在上下文菜单中)。
    • Paul Kim的Hazel(商业软件)是Folder Actions的一个强大替代品,它增加了基于规则的处理和大量文件系统事件处理条件,远远超出了简单Folder Actions所能达到的标准–如果您需要调查Hazel,计划按照您现在计划的内容做更多或更多复杂的事情。

    替代整个脚本方法的方法是使用LateNiteSoft的Clusters(另一种商业软件),它除了对观察文件夹的内容自动应用(并在需要时重新应用)HFS +压缩外,什么也不做。


感谢您的回答。我将尝试将AppleScript作为文件夹操作运行的选项。我知道集群,而我想要实现的正是(一个穷人的集群);)
Boj 2012年

@williamvoor:很高兴能有所帮助。那你介意接受答案吗?那是复选标记按钮:)。
kopischke'5

文件夹操作脚本解决方案有效。我在问题上粘贴了脚本本身。
Boj 2012年

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用作Folder动作,该动作将在添加文件时对其进行压缩

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计划的重定向更多),并且会要求进行身份验证每次(在自动化环境中烦人)。
kopischke 2012年

0

集群

……利用Mountain Lion,Lion和Snow Leopard中的文件压缩技术……

MoreSpace文件夹压缩

…HFS +压缩对未压缩的文件格式(例如文本和数据文档,数据库和邮箱)具有最佳效果。典型的邮件邮箱大小最多可以减少50%。…

偏爱

在这两个中,我发现群集更成熟且更易于使用-可能更适合此问题。


谨慎行事

在极端情况下,AppleFSCompression的第三方使用可能会发生无声数据丢失。据我所知,这是操作系统中的错误,可能仅在非常缺乏可用空间的情况下发生。我会将错误反馈给Apple。


1
这两个似乎都已停产。
EpicVoyage
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.