Heim >Backend-Entwicklung >Golang >Wie markiere ich Dateien in zip als ausführbare Unix-Datei?

Wie markiere ich Dateien in zip als ausführbare Unix-Datei?

WBOY
WBOYnach vorne
2024-02-14 08:18:08983Durchsuche

如何将 zip 中的文件标记为 unix 可执行文件?

Der PHP-Editor Xiaoxin zeigt Ihnen, wie Sie die Dateien in der ZIP-Datei als ausführbare Unix-Dateien markieren. In Unix-Systemen wird das ausführbare Attribut einer Datei durch die Berechtigungen der Datei bestimmt, daher müssen wir die Berechtigungen der Dateien in der ZIP-Datei ändern. Entpacken Sie zunächst die ZIP-Datei in den Zielordner. Verwenden Sie dann den Befehl chmod, um die Berechtigungen der Datei zu ändern. Packen Sie abschließend die geänderten Dateien erneut in eine ZIP-Datei. Mit diesem einfachen Schritt können Sie die Dateien in Ihrer ZIP-Datei als ausführbare Unix-Datei markieren.

Frageninhalt

Ich möchte eine Funktion wie diese schreiben:

func MarkFileAsExecutable(zipPath, filePath string) error

Es erhält den Pfad zur ZIP-Datei und den Dateipfad innerhalb der ZIP-Datei. Das Ziel besteht darin, mit dem Paket zip die externen Attribute einer internen Datei zu ändern und sie als ausführbare Unix-Datei zu markieren.

Bitte beachten Sie, dass das Markieren der Datei als ausführbar vor dem Archivieren mit chmod +x keine Lösung ist, da ich sie für die Arbeit unter Windows benötige. Daher muss ich das vorhandene Zip-Archiv entsprechend anpassen. chmod +x 归档文件之前将文件标记为可执行文件并不是一个解决方案,因为我需要它在 windows 上工作。因此,我需要相应地修改现有的 zip 存档。

解决方法

您可以使用 zip 包。它提供了一个reader和一个writer

Workaround

Sie können das 🎜-Paket verwenden. Es stellt einen Reader und einen Writer bereit. Sie öffnen das Zip-Archiv mit dem Reader. Anschließend durchlaufen Sie die Dateien im Archiv, ändern die Berechtigungen nach Bedarf und kopieren die Dateien in den Writer. 🎜 🎜Dies ist ein Minimalbeispiel ohne Fehlerprüfung: 🎜
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)
    }
}

Das obige ist der detaillierte Inhalt vonWie markiere ich Dateien in zip als ausführbare Unix-Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen