Как включить модификаторы команд в Process ()? - PullRequest
0 голосов
/ 14 апреля 2019

Цель: Я пытаюсь заархивировать файл с помощью скрипта swift.

Я хочу заархивировать папку с помощью скрипта Swift, как показано ниже (в приглашении):

$~/workarea:ls
MyStuff/
$~/workarea:tar -cf MyStuff.zip MyStuff
$~/workarea:ls
MyStuff/    MyStuff.zip
$~/workarea:

Вот скрипт Swift:

import Foundation

let workArea = "/Users/Ric/workarea"

extension Process {
    private static let tarExecURL = URL(fileURLWithPath: "/usr/bin/tar")

    public func zip(source: String, archivedOutput: String) throws {
        executableURL = Process.tarExecURL
        arguments = ["-cf", archivedOutput, source]
        // emulate this: $~/workarea:tar -cf MyStuff.zip MyStuff
        try run()
    }

}

// ============================================================================================

func zipFolder() {
   // let sourceURL = URL(string:workArea+"MyStuff")
    let source = workArea+"/"+"MyStuff"
    let output = workArea+"/"+"MyStuff.zip"
    try! Process().zip(source: source, archivedOutput: output)
    print("Finished Archive")
}

// ============================================================================================

zipFolder()

print("Done")

Я использовал абсолютный путь к файлам:

(lldb) po source
"/Users/Ric/workarea/MyStuff"

(lldb) po output
"/Users/Ric/workarea/MyStuff.zip"

Но смола жаловалась на '/'.

Я получаю следующую ошибку в консоли:

Finished Archive
Done
tar: Removing leading '/' from member names
Program ended with exit code: 0

Решение

1 Ответ

1 голос
/ 14 апреля 2019

Вы включаете tar дважды, один раз в качестве команды, затем снова в качестве аргумента.Это должно быть:

arguments = ["-cf", archivedOutput, source]

После удаления избыточного tar вы должны получить вывод:

Finished Archive
Done

EDIT : путь "workArea" долженвключите косую черту:

let workArea = "/Users/Ric/workarea/"

В противном случае вы получите пути, которые выглядят так:

/Users/Ric/workareaMyStuff.zip
...