Warum schlägt der Exec-Befehl für einen MV-Platzhalter in Go fehl?
Beim Versuch, einen MV-Befehl mit dem Exec-Paket in Go auszuführen, Möglicherweise tritt ein Fehler auf, wenn der Befehl ein Platzhalter-Sternchen (*) für die Auswahl mehrerer Dateien enthält. Dieses Problem entsteht, weil die Go-Laufzeit das Sternchen im Gegensatz zur Shell nicht als Platzhalter interpretiert.
Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:
Option 1: Manuell erweitern Platzhalter
Sie können die Platzhalter manuell selbst erweitern, indem Sie die Funktion filepath.Glob() verwenden, die einen Ausschnitt übereinstimmender Dateipfade zurückgibt. So würden Sie es machen:
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: Aufrufen der Shell
Alternativ können Sie die Shell aufrufen und sie die Platzhaltererweiterung für Sie durchführen lassen . So würden Sie es machen:
import ( "os/exec" ) cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir") output, err := cmd.CombinedOutput()
Dieser Ansatz nutzt die eigenen Wildcard-Verarbeitungsfunktionen der Shell.
Rekursive Dateiverschiebung
Bei Bedarf Um alle Dateien rekursiv von einem Verzeichnis in ein anderes zu verschieben, können Sie die Funktion filepath.Walk() verwenden, um das Quellverzeichnis zu durchlaufen und auszuführen der mv-Befehl für jedes gefundene Unterverzeichnis und jede gefundene Datei.
Das obige ist der detaillierte Inhalt vonWarum schlägt `exec.Command('mv')` mit Platzhaltern in Go fehl und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!