Exécuter les commandes mv différemment dans Go et Bash
Dans Go, l'utilisation du package exec pour exécuter la commande mv peut entraîner des problèmes lors de l'utilisation des caractères génériques comme "*" dans les arguments de la commande. Bien que la commande fonctionne comme prévu dans le terminal, le caractère générique astérisque ne semble pas fonctionner dans le script Go.
La raison de cet écart réside dans la façon dont le shell et Go gèrent les arguments de la commande. Dans le terminal, le shell interprète le caractère générique et le remplace par une liste de noms de fichiers correspondants. Cependant, dans Go, la commande est transmise sous forme de chaîne et considère le caractère générique littéralement comme faisant partie de l'argument.
Pour contourner ce problème, vous avez deux options :
Développez manuellement les caractères génériques
Vous pouvez utiliser la fonction filepath.Glob de Go pour récupérer une liste de fichiers qui correspondent au modèle de caractère générique, puis transmettre les noms de fichiers individuels comme arguments pour exec.Command. Par exemple :
files, err := filepath.Glob("./source-dir/*") if err != nil { // Error handling } cmd := exec.Command("mv", files, "./dest-dir")
Utiliser l'invocation du shell
Vous pouvez appeler le shell lui-même pour exécuter la commande mv avec les caractères génériques. Le shell interprétera les caractères génériques et transmettra les arguments développés à la commande mv. Par exemple :
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
En utilisant l'une de ces approches, vous pouvez vous assurer que les caractères génériques sont gérés correctement dans vos scripts Go, vous permettant ainsi d'exécuter les commandes mv comme prévu.
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!