Maison  >  Article  >  développement back-end  >  Comment marquer des fichiers zip comme exécutables Unix ?

Comment marquer des fichiers zip comme exécutables Unix ?

WBOY
WBOYavant
2024-02-14 08:18:08968parcourir

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

L'éditeur php Xiaoxin vous présentera comment marquer les fichiers du fichier zip comme fichiers exécutables Unix. Dans les systèmes Unix, l'attribut exécutable d'un fichier est déterminé par les autorisations du fichier, nous devons donc modifier les autorisations des fichiers dans le fichier zip. Tout d’abord, décompressez le fichier zip dans le dossier cible. Ensuite, utilisez la commande chmod pour modifier les autorisations du fichier. Enfin, reconditionnez les fichiers modifiés dans un fichier zip. Avec cette étape simple, vous pouvez marquer les fichiers de votre fichier zip comme exécutables Unix.

Contenu de la question

Je souhaite écrire une fonction comme celle-ci :

func MarkFileAsExecutable(zipPath, filePath string) error

Il reçoit le chemin du zip et le chemin du fichier dans le zip. Le but est d'utiliser le package zip pour modifier les attributs externes d'un fichier interne, en le marquant comme exécutable Unix.

Veuillez noter que marquer le fichier comme exécutable avant de l'archiver à l'aide de chmod +x n'est pas une solution car j'en ai besoin pour travailler sous Windows. Par conséquent, je dois modifier l'archive zip existante en conséquence. chmod +x 归档文件之前将文件标记为可执行文件并不是一个解决方案,因为我需要它在 windows 上工作。因此,我需要相应地修改现有的 zip 存档。

解决方法

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

Solution de contournement

Vous pouvez utiliser le package 🎜. Il fournit un lecteur et un écrivain. Vous ouvrez l'archive zip avec Reader. Vous parcourez ensuite les fichiers de l'archive, modifiez les autorisations si nécessaire et copiez les fichiers sur l'enregistreur. 🎜 🎜Ceci est un exemple minimal sans vérification d'erreur : 🎜
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)
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer