Heim > Backend-Entwicklung > Golang > Warum schlägt `exec.Command('mv')` mit Platzhaltern in Go fehl und wie kann ich das beheben?

Warum schlägt `exec.Command('mv')` mit Platzhaltern in Go fehl und wie kann ich das beheben?

Patricia Arquette
Freigeben: 2024-12-31 19:49:13
Original
373 Leute haben es durchsucht

Why Does `exec.Command(

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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage