Maison >développement back-end >Golang >Pourquoi `exec.Command('mv')` échoue-t-il avec les caractères génériques dans Go et comment puis-je y remédier ?

Pourquoi `exec.Command('mv')` échoue-t-il avec les caractères génériques dans Go et comment puis-je y remédier ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-31 19:49:13376parcourir

Why Does `exec.Command(

Pourquoi la commande Exec échoue-t-elle pour un caractère générique MV dans Go ?

Lorsque vous tentez d'exécuter une commande mv à l'aide du package exec dans Go, vous pouvez rencontrer une erreur si la commande inclut un astérisque générique (*) pour sélectionner plusieurs fichiers. Ce problème se produit car le runtime Go n'interprète pas l'astérisque comme un caractère générique, contrairement au shell.

Pour résoudre ce problème, vous disposez de deux options :

Option 1 : développer manuellement Caractères génériques

Vous pouvez développer manuellement les caractères génériques vous-même à l'aide de la fonction filepath.Glob(), qui renvoie une tranche du fichier correspondant chemins. Voici comment procéder :

import (
    "filepath/glob"
    "os/exec"
)

cmd := exec.Command("mv")
files, err := glob.Glob("./source-dir/*")
if err != nil {
    // Handle error
}
args := []string{"--", "./dest-dir"}
args = append(args, files...)
cmd.Args = args

output, err := cmd.CombinedOutput()

Option 2 : Invoquer le shell

Vous pouvez également invoquer le shell et le laisser effectuer l'extension des caractères génériques à votre place. . Voici comment procéder :

import (
    "os/exec"
)

cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir")
output, err := cmd.CombinedOutput()

Cette approche exploite les propres capacités de gestion des caractères génériques du shell.

Mouvement de fichiers récursif

Si vous en avez besoin pour déplacer de manière récursive tous les fichiers d'un répertoire à un autre, vous pouvez utiliser la fonction filepath.Walk() pour parcourir le répertoire source et exécuter le Commande mv pour chaque sous-répertoire et fichier rencontré.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn