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!