Rumah >pembangunan bahagian belakang >Golang >Mengapakah `exec.Command('mv')` Gagal dengan Wildcard dalam Go dan Bagaimana Saya Boleh Membetulkannya?
Mengapa Exec Command Gagal untuk MV Wildcard dalam Go?
Apabila cuba melaksanakan perintah mv menggunakan pakej exec dalam Go, anda mungkin menghadapi ralat jika arahan itu menyertakan asterisk kad bebas (*) untuk memilih berbilang fail. Isu ini timbul kerana masa jalan Go tidak mentafsirkan asterisk sebagai kad bebas, tidak seperti cangkerang.
Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:
Pilihan 1: Kembangkan Secara Manual Kad bebas
Anda boleh mengembangkan sendiri kad bebas secara manual menggunakan fungsi failpath.Glob(), yang mengembalikan sepotong laluan fail yang sepadan. Begini cara anda melakukannya:
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()
Pilihan 2: Sebut Shell
Sebagai alternatif, anda boleh menggunakan shell dan biarkan ia melakukan pengembangan kad bebas untuk anda . Begini cara anda melakukannya:
import ( "os/exec" ) cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir") output, err := cmd.CombinedOutput()
Pendekatan ini memanfaatkan keupayaan pengendalian kad bebas shell sendiri.
Pergerakan Fail Rekursif
Jika anda perlukan untuk mengalihkan semua fail secara rekursif dari satu direktori ke direktori lain, anda boleh menggunakan fungsi filepath.Walk() untuk mengulang melalui direktori sumber dan laksanakan arahan mv untuk setiap subdirektori dan fail yang ditemui.
Atas ialah kandungan terperinci Mengapakah `exec.Command('mv')` Gagal dengan Wildcard dalam Go dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!