Rumah >pembangunan bahagian belakang >Golang >Mengapakah `exec.Command('mv')` Gagal dengan Wildcard dalam Go dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah `exec.Command('mv')` Gagal dengan Wildcard dalam Go dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Patricia Arquetteasal
2024-12-31 19:49:13376semak imbas

Why Does `exec.Command(

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn