如何在Process()中包含命令修饰符?

问题描述 投票:0回答:1

目标:我正在尝试通过快速脚本压缩文件。

我想通过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

解?

swift macos tar
1个回答
1
投票

您将tar包括两次,一次作为命令,然后再作为参数。它应该是:

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

一旦你删除冗余的tar你应该得到输出:

Finished Archive
Done

编辑:“workArea”路径应包含一个尾随正斜杠:

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

否则你最终会得到如下所示的路径:

/Users/Ric/workareaMyStuff.zip
© www.soinside.com 2019 - 2024. All rights reserved.