将多个文件夹批量压缩为单个zip文件


9

我有几十个文件夹需要压缩成单独的zip文件。

如果我在Finder中选择所有这些文件夹并执行“压缩[X]项目”,我会得到一个包含所有文件夹的zip文件,而我想要的是每个文件夹一个zip文件。

我尝试使用“创建存档”操作使用Automator创建工作流程,但它的行为方式相同:输入多个文件/文件夹会输出单个zip文件。无法单独指定对每个项目运行的操作。

基本上,我正在寻找一种方法来避免在Finder中一次一个地在每个文件夹上单独运行“压缩”。有没有办法自动化这个?


1
我更新了我的答案,以改进用于增加zip存档文件名的代码,以便模拟Finder上下文菜单Compress [n] Items命令如何增加文件名。
user3439894 2016年

对不起,我再次更新了代码以删除不必要的popd并纠正了一个致命的拼写错误for i in $bn*.zip; do,本来应该是for i in $bn *.zip; do。注意之间的间隔$bn*.zip,有人失踪,不应该是。所以请在您的实现中更新它,否则File Name 2.zip当它basename有空格时它会继续。
user3439894 2016年

Answers:


13

下面是一个Automator的服务,在变得可用搜索的文件夹被选择和模拟上下文菜单 压缩[n]的物品 的命令 ,除了它创建了一个单独的zip档案文件为每个选定的文件夹中的名称选定的文件夹。如果Folder Name.zip文件已存在,则将" 2"空格 2)附加到文件名,例如Folder Name 2.zip。这确保了现有的zip存档文件未触及,zip存档文件名将根据需要自动递增。

创建服务:

  1. 打开Automator并选择服务文件 > 新建 > 服务如果Automator已打开。

  2. 设置服务接收选择的文件夹,并查找

  3. 添加一个Run Shell Script Action,将Shell:设置为/ bin / bash并将输入:作为参数传递它们并添加以下代码

    for f in "$@"; do
    
        dn="$(dirname "$f")"
        bn="$(basename "$f")"
    
        pushd "$dn"
    
        if [[ ! -e "$bn.zip" ]]; then
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip"
        else
            n=2
            for i in $bn *.zip; do
                if [[ "$bn $n.zip" == "$i" ]]; then
                    n="$(( $n + 1 ))"
                fi
            done
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip"
        fi
    
    done
    
    afplay /System/Library/Sounds/Purr.aiff
  4. 服务保存为:单独压缩文件夹

使用服务:

Finder桌面上选择多个文件夹,然后右键单击并从“ 服务”下选择“ 单独压缩文件夹”

或者在选择目标文件夹后,您还可以从菜单栏中单击Finder > 服务 > 单独压缩文件夹

在那里,你有一种方法可以在模拟Finder创建zip存档文件的方式的同时,在单个zip存档中单独和同时压缩多个文件夹。这意味着zip存档在子目录__MACOSX中包含保留的资源分支和HFS元数据,并且仅在目标存档中嵌入父目录名,而不是在使用(不)创建存档时使用完全限定的路径名。zip-j

单独压缩文件夹的图像(服务)

单独压缩文件夹 -  Automator服务


我检查了你的解决方案和@ ababak的。它们给出完全相同的结果,ababak更容易实现。无论如何我还投票了。
turzifer 2016年

12

如果您不想使用Automator,并且可以更改Archive Utility的设置,则可以使用内置的替代解决方案。

  1. 打开位于/ System / Library / CoreServices / Applications /中的Archive Utility.app
  2. 转到文件>首选项
  3. 将“使用存档格式”首选项更改为“Zip存档”
  4. 将文件夹拖放到停靠栏中的图标中。

关于此选项的好处是您可以将Archive Utility.app首选项设置为在完成后将原始文件移动到垃圾箱,它不仅限于文件夹。有没有办法设置Automator服务打开Archive Utility.app作为服务,如果您想要右键单击作为选项?我遇到了限制,因为无法使用“启动应用程序”操作选择Archive Utility.app。
thepen 2016年

@thepen,当然您可以选择Archive Utility作为启动应用程序操作。你只需要选择“其他......”并导航到它的位置/System/Library/CoreServices/Applications/(你可以在文件选择对话框打开时按下Cmd-Shift-G粘贴这条路径以便快速导航)
ababak 2016年
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.