用于压缩文件的Apple脚本

时间:2015-12-09 11:58:51

标签: macos bash zip applescript

我已经看过这里的2个示例脚本来做类似的事情,但两者都不适合用例,我似乎不能让他们去工作!

我只是想设置一个非常基本的AppleScript来执行以下操作:

  1. 要求用户选择文件&文件夹作为输入源。
  2. 要求用户选择输出目的地和filname
  3. 使用命令“zip -r -j -X
  4. 希望它能够在桌面上运行一个应用程序,或者通过鼠标右键单击可能的竞争菜单...但我现在就采取任何措施!任何人都可以帮忙吗?

    如果它有帮助,我试图调整这个脚本吗?

    set workspace to (path to desktop as text)
    
    tell application "Finder"
       set inputFolder to choose folder with prompt "Select a folder to be zipped"
    
       set copiedFile to (duplicate inputFolder to workspace) as string
       set copiedFile to text 1 thru -2 of copiedFile --remove the trailing ":" 
    
       tell current application
          set qpp to quoted form of POSIX path of copiedFile
          do shell script "cd $(dirname " & qpp & ")
            zip -r  -j -X \"$(basename " & qpp & ").zip\" \"$(basename " & qpp & ")\""
         set zipFile to copiedFile & ".zip"
       end tell
    
       set outputFolder to choose folder with prompt "Select the output folder"
       move zipFile to outputFolder                                                          
    end tell
    

2 个答案:

答案 0 :(得分:1)

tell application "Finder"
    set theItem to choose file --i had no problems when i changed this to choose folder

    set itemPath to quoted form of POSIX path of theItem
    set fileName to name of theItem

    set thefolder to choose folder

    set thefolder to POSIX path of thefolder
    set zipFile to quoted form of (thefolder & fileName & ".zip")

    do shell script "zip -jr " & zipFile & " " & itemPath
end tell

这可以完成您描述的所有内容,但我不知道-x是什么,谷歌搜索它并没有帮助。这会删除原始项目吗?

正如您可能已经或可能没有意识到的那样,Apple有两个单独的命令来选择计算机上的内容,“选择文件”和“选择文件夹”。正如他们的名字所暗示的那样,你似乎无法同时选择两者。这也是有道理的,因为有时您可能希望确保用户选择文件。话虽如此,似乎有办法绕过它documented here。第一个答案看起来有点极端,但我喜欢底层答案的想法是制作一个你只需将文件拖到上面的脚本。他写的内容表明如果你这样做就很容易。

我也能够使用“允许多个选择”然后我能够将所有内容移动到一个文件夹中,但由于某种原因,我开始遇到问题,也不知道为什么。也许我意外地改变了代码中的某些东西,因为你认为压缩文件夹是一个与压缩文件相同的过程。无论如何,无论我最后解决它的想法是现在给我旋转沙滩球,我即将强行退出它,我认为未保存的脚本将会消失,我真的不想从头开始,但这个想法本身很简单,你做的事情就像“设置项目选择允许多项选择的文件”,并做一些关于“在项目中重复项目”的内容,并在重复循环内部你只需“移动项目”(你放那里的文件夹的路径)“然后你不是做所有的”theitem“而是把它放到你放入所有内容的文件夹中。

无论如何,这会做第1步和第2步。

答案 1 :(得分:0)

-r选项正在为所有子/子文件夹执行递归压缩。

-j选项在zip存档中删除对初始目录的任何引用。只是文件名。

-X选项删除通常存储在zip文件中的所有额外字段属性(某些属性特定于某些操作系统)

下面的脚本与Pau的脚本非常相似(我有点慢!)但是如果你把它保存为一个应用程序,你可以用两种方式使用它:

1)您可以选择文件和文件夹并将其放在此应用程序上。删除的所有项目将合并为一个zip文件。这是On Open处理程序。

2)您可以运行要求您选择文件夹的应用程序,并提示询问您最终zip文件的名称(默认情况下,在要压缩的文件夹的父文件夹中)。

on open Droped_Items -- could be folders or files
set ZipFile to (choose file name with prompt "Define your zipped file" default name "") as string

repeat with MyItem in Droped_Items
    do shell script "zip -rjX " & (quoted form of (POSIX path of ZipFile)) & ".zip " & quoted form of (POSIX path of (MyItem as string))
end repeat
end open


on run
set inputFolder to choose folder with prompt "Select a folder to be zipped" 
tell application "Finder"
    set Myfolder to (container of inputFolder) as alias -- get the parent folder
    set MyName to name of inputFolder
end tell
set ZipFile to (choose file name with prompt "Define your zipped file" default name MyName default location Myfolder) as string
do shell script "zip -rjX " & (quoted form of (POSIX path of ZipFile)) & ".zip " & quoted form of (POSIX path of (inputFolder as string))
end run

这样做,您可以在ZIP文件和文件夹中合并。

最后,但并非最不重要的是,Finder已经在文件/文件夹选择后右键单击提供此zip功能。但在此脚本中,您可以设置he -jX选项。