2015-07-29 2 views
0

Я пытаюсь написать виджет приложения сценария Apple, который будет делать следующее.AppleScript Zip содержимое папок без включения каких-либо папок

Когда вы перетаскиваете несколько папок на виджет, они будут застегивать содержимое каждой папки в виде отдельного почтового индекса, эти почтовые индексы будут находиться в том же каталоге, что и виджет.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу решить, как удалить исходную папку, когда вы разархивируете архив, он должен иметь все файлы и подпапки.

Например, если я пронестись MyFolder/index.html И MyFolder/IMG/myImage.png

Он должен распаковать, как только index.html и IMG/мой image.png

Это было бы невероятно полезный для меня, я должен застегнуть содержимое папок примерно 50 раз в день, переименовав zips с именем папки и скопировав их в родительскую папку.

Если кто-то может помочь в этом, я готов предложить тайный приз, у меня есть тонна паровых ключей!

Благодаря

Будет

+0

Можете ли вы опубликовать свой текущий сценарий? –

+0

Привет, Я рассматривал несколько сценариев и пытался их комбинировать, то, что я просил, немного более продвинуто, чем эти, поскольку я прошу несколько папок сразу, но что-то вроде этого – Wiplash

+0

скажите приложению «Finder», установите для параметра Items повторение выбора с помощью _a от 1 до (count of theItems) установите значение theItem в (элемент _a элементов) как псевдоним set itemPath для цитируемой формы пути POSIX для файла setName для имени theItem задайте путь Folder к POSIX (контейнер ofItem as alias) установить zipFile в форму, указанную в виде (theFolder & fileName & ".zip"), выполнить сценарий оболочки «zip -r» & zipFile & «» & itemPath end repeat end tell – Wiplash

ответ

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, Альфред, и Keyboard Maestro, они помогают создавать действия, как это. Там есть приложения для архивов, такие как Archiver и Entropy, которые приходят с такими действиями.

Если вы хотите научиться applescript, то вот несколько функций, которые вы могли бы рассмотреть.

  1. Сделать апплет запрашивать имя для архива и использовать его.
    Обработчик диалога

    дисплея, и передать результаты в обработчик zipFolder в качестве второго аргумента

  2. Reveal файл в Finder после его создания.

    сказать Finder, чтобы раскрыть архив

  3. Переместить в определенный каталог, чтобы загрузить его, например, Dropbox

    сказать Finder, чтобы переместить/копировать, или команду Баш mv

  4. Make апплет обрабатывать файлы тоже. Если какое бы поведение вы этого ни хотели.

Другие могут только помочь вам, потому что они могут не полностью понять дилемму, с которой вы сталкиваетесь, поэтому изучение этого было бы беспроблемным и забавным.

+0

Спасибо так много, я проверю его и вернусь к вам, посмотрите, хотите ли вы получить приз – Wiplash

+0

Мне сказали, что скрипт grunt или bash может быть способом пойти – Wiplash

+0

Скрипт отлично работает, он просто не переименовывает zip's, они оба называются работами для меня, я постараюсь понять это, спасибо – Wiplash

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 
+0

Привет, спасибо всем, кто помогал раньше. У меня есть еще одна вещь, которую мне нужно сделать для скрипта. Я пытаюсь решить, как исключить определенные типы файлов из этой операции. Я думаю, что мне нужно что-то вроде -x "* .scss", но я не могу получить синтаксис правильно. Любая помощь очень ценится. – Wiplash

Смежные вопросы