如何解决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 举报,一经查实,本站将立刻删除。