微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift - 在 swift 压缩文件时是否有一种简单的方法来保留符号链接?

如何解决swift - 在 swift 压缩文件时是否有一种简单的方法来保留符号链接?

这里是 Swift 新手。

TL;DR:

重点是 zlib、tar-gzip(首选)或压缩一个文件夹(在常规文件中)包含符号链接,同时保留这些符号链接(而不是将这些符号链接的实际目标压缩到存档中)。

问题:

在 swift 中使用文件夹和符号链接进行递归压缩似乎是一项艰巨的任务,因为似乎只有单个文件/数据压缩功能在 Swift 中本地实现(https://developer.apple.com/documentation/accelerate/compressing_and_decompressing_files_with_swift_stream_compression),并且没有简单的动手操作如何使用它复杂的文件夹结构。

有一些库可以帮助处理这个问题,比如 https://github.com/marmelroy/Zip 用于 zip 或 https://github.com/1024jp/GzipSwift 用于 gzip,问题在于我发现没有一个库将符号链接作为符号链接处理。那些只是按照符号链接并压缩实际文件

我喜欢 marmelroy 的 Zip 语法,您可以在其中简单地指定要压缩的文件/文件夹的 NSURL,而不必担心数据结构、文件夹结构和内容、缓冲和所有内容

do {
    let filePath = Bundle.main.url(forResource: "file",withExtension: "zip")!
    let unzipDirectory = try Zip.quickUnzipFile(filePath) // Unzip
    let zipFilePath = try Zip.quickZipFiles([filePath],fileName: "archive") // Zip
}
catch {
  print("Something went wrong")
}

唯一的问题是它不允许您使用符号链接或具有一些自定义处理程序。

问题:

是否有一个 swift package / hack / 足够简单的方法来 tar-gzip/zlib/zip 一个足够大的文件夹,该文件夹将具有符号链接,同时仍将它们保留为链接?您能否分享一些工作片段或为我指明正确的方向?

如果能同时兼容 macos、ipados 和 ios 就最好了。

谢谢!


更新:

使用数据结构(如 https://github.com/tsolomko/SWCompression 或 GzipSwift)的库可能是正确的,但都在努力将文件夹(其中包含一些文件和符号链接)表示为数据结构,并且怀疑编写整个文件(例如 500 Gb ) 文件夹到内存中的字节缓冲区,而不是在小块中这样做是一件好事(= 内存不足问题)。

我猜应该很容易做,但是很难找到任何简单快速工作代码,这些代码适用于包含媒体和符号链接压缩和以任何格式(tar-gzip、zip 或其他任何格式)解压缩它们。

解决方法

Info-ZIP 的 zip 有一个 { "data": [ { "value1": "test","value2": 16,"submit_date": 44394 } ] } 选项来存储符号链接而不是它引用的内容。

tar,默认,将符号链接存储为链接。你必须给它一个选项 (-y) 让它跟随符号链接。

zlib 不提供任何文件/目录归档功能。仅压缩。

您可以使用 Process 从 Swift 运行 zip 或 tar 等命令。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。