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
Libérer: 2024-12-31 19:49:13
original
356 Les gens l'ont consulté

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()
Copier après la connexion

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()
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal