gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:43:57 27 4
gpt4 key购买 nike

目标:我正在尝试通过 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"

但是 tar 提示'/'。

我在控制台中收到以下错误:

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

解决方案?

最佳答案

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

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

删除多余的 tar 后,您应该得到输出:

Finished Archive
Done

编辑:“workArea”路径应该包含尾部正斜杠:

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

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

/Users/Ric/workareaMyStuff.zip

关于swift - 如何在 Process() 中包含命令修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55679413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com