英文:
How to mark a file in a zip as unix executable?
问题
我想写一个类似这样的函数:
func MarkFileAsExecutable(zipPath, filePath string) error
它接收一个 zip 文件的路径和 zip 内的文件路径。目标是使用 zip
包来修改文件内的 ExternalAttributes,将其标记为 Unix 可执行文件。
请注意,在使用 chmod +x
将文件标记为可执行文件之前进行归档并不是一个解决方案,因为我需要在 Windows 上使用此功能。所以,我需要相应地修改现有的 zip 归档文件。
英文:
I'd like to write a function like this:
func MarkFileAsExecutable(zipPath, filePath string) error
It receives a path to a zip and a file path within the zip. The goal is to use the zip
package to change the ExternalAttributes of the file inside to mark it as a unix executable.
Note that marking the file as executable prior to archiving it using chmod +x
isn't a solution because I need this to work on Windows. So instead I need to modify the existing zip archive accordingly.
答案1
得分: 3
你可以使用zip
包。它提供了一个Reader
和一个Writer
。你可以用一个读取器打开zip归档文件。然后遍历归档文件中的文件,根据需要更改权限,并将文件复制到写入器中。
以下是一个简单的示例,没有错误检查:
package main
import (
"archive/zip"
"os"
)
func main() {
r, _ := zip.OpenReader("example.zip")
defer r.Close()
f, _ := os.Create("output.zip")
defer f.Close()
w := zip.NewWriter(f)
defer w.Close()
for _, f := range r.File {
f.SetMode(0777)
w.Copy(f)
}
}
英文:
You can use the zip
package. It provides a Reader
and a Writer
. You open the zip archive with a reader. Then you walk the files in the archive, change your permissions as needed, and copy the files to the writer.
Here is a minimal example, without error checking:
package main
import (
"archive/zip"
"os"
)
func main() {
r, _ := zip.OpenReader("example.zip")
defer r.Close()
f, _ := os.Create("output.zip")
defer f.Close()
w := zip.NewWriter(f)
defer w.Close()
for _, f := range r.File {
f.SetMode(0777)
w.Copy(f)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论