AppleScript Zip文件夹的内容,不包含任何文件夹

时间:2015-07-29 06:39:29

标签: applescript

我正在尝试编写一个苹果脚本应用程序小部件,它将执行以下操作。

当您将多个文件夹拖到窗口小部件上时,它会将每个文件夹的内容压缩为一个单独的zip,这些拉链将与窗口小部件位于同一目录中。

我遇到的问题是我无法弄清楚如何删除初始文件夹,当你解压缩存档时,它需要释放所有文件和子文件夹。

例如,如果我压缩myFolder / index.html 和myFolder / img / myImage.png

它应该解压缩为index.html和img / my image.png

这对我来说非常有用,我每天要将文件夹的内容压缩大约50次,用文件夹的名称重命名拉链并将它们复制到父文件夹中。

如果有人能帮忙解决这个问题,我愿意提供一个神秘奖品,我就会有大量的蒸汽钥匙!

由于

威尔

2 个答案:

答案 0 :(得分:0)

这应该可以帮助您入门。如果您不理解某种行为,请随意提问。

on open theFiles
    repeat with x in theFiles
        set _path to POSIX path of x
        tell application "Finder"
            if kind of x is "Folder" then
                tell me to zipFolder(_path)
            end if
        end tell
    end repeat
end open

on run
    --  Handle the case where the script is launched without any dropped files
    open (choose folder with multiple selections allowed)
end run

on zipFolder(theFolderPath)
    do shell script "cd " & quoted form of theFolderPath & " && zip -r \"../$(basename $(pwd)).zip\" ./"
end zipFolder

这是full applet你也可能想看一下像LaunchBar,Alfred和Keyboard Maestro这样的应用程序,它们可以帮助创建这样的动作。有一些存档的应用程序,如Archiver和Entropy,它们都带有这样的行为。

如果您想学习AppleScript,那么这里有一些您可以考虑添加的功能。

  1. 让applet询问存档的名称,然后使用它。
      

    显示对话框处理程序,并将结果作为第二个参数传递给zipFolder处理程序

  2. 创建后在Finder中显示该文件。
      

    告诉Finder透露

  3. 将存档移动到特定目录以上传它,例如Dropbox的
      

    告诉Finder移动/复制或bash命令mv

  4. 让applet处理文件。如果你想要它做什么行为。
  5. 其他人只能帮助你,因为他们可能无法完全理解你所面临的两难境地,所以学习这一点会非常有用,也很有趣。

答案 1 :(得分:0)

对于任何感兴趣的人,这是我正在使用的最终脚本。此脚本接受所选的任何文件夹,并从每个文件夹创建一个zip存档,将它们重命名为文件夹名称,并且不包含zip中的根文件夹。这对于制作Flashtalking HTML5横幅特别有用。

on run {input, parameters}
    if input is {} then -- no dropped items
        tell application "Finder" to set input to selection as alias list
    end if
    repeat with x in input
        set _path to POSIX path of x
        tell application "Finder"
            if kind of x is "Folder" then tell me to zipFolder(_path)
        end tell
    end repeat
end run

on zipFolder(theFolderPath)

    do shell script "tDir=" & (quoted form of theFolderPath) & "; cd \"$tDir\"; aZip=\"../$(basename \"$tDir\").zip\"; if [ -e \"$aZip\" ]; then rm \"$aZip\"; fi;  zip -r  \"$aZip\" ./"
end zipFolder