為什麼 Go 中的 MV 通配符 Exec 指令失敗?
當嘗試使用 Go 中的 exec 套件執行 mv 命令時,如果命令包含用於選擇多個檔案的通配符星號 (*),您可能會遇到錯誤。出現此問題的原因是,與 shell 不同,Go 運行時不會將星號解釋為通配符。
要解決此問題,您有兩個選項:
選項1:手動展開通配符
您可以使用filepath.Glob() 函數自行手動擴展通配符,該函數傳回一個切片匹配檔案路徑。操作方法如下:
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()
選項 2:呼叫 Shell
或者,您可以呼叫 Shell 並讓它為您執行通配符擴充。以下是您的操作方法:
import ( "os/exec" ) cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir") output, err := cmd.CombinedOutput()
此方法利用 shell 自己的通配符處理功能。
遞歸檔案移動
如果您需要將所有檔案從一個目錄遞歸移到另一個目錄,可以使用filepath.Walk() 函數迭代來源目錄並對遇到的每個子目錄和檔案執行mv 指令。
以上是為什麼 Go 中的 exec.Command('mv')` 因通配符而失敗,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!