在 Go 中,exec 套件用於執行外部命令。嘗試使用萬用字元 ('./source-dir/*') 執行「mv」指令時,會出現「退出狀態 1」錯誤,輸出顯示「沒有此類檔案或目錄」。然而,在帶有通配符的終端機中運行相同的命令會成功。
與 shell 不同,shell 解釋通配符並將其擴展為匹配的清單檔案中,exec 套件將通配符字面上視為單一參數。這意味著“mv”命令看到的是通配符(“*”)而不是檔案名稱列表。
要在Go 中使用通配符,有兩種方法:
import "path/filepath" files, err := filepath.Glob("./source-dir/*") if err != nil { // Handle error } cmd := exec.Command("mv", files...)
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
要將所有檔案從來源目錄遞歸移至目標目錄,您需要遞歸地迭代來源目錄,然後移動找到的每個檔案或目錄。如果來源包含子目錄,您可以遞歸地移動每個子目錄,或者使用像 os 這樣提供移動樹功能的套件。
以上是為什麼我的 Go `exec.Command` 由於通配符而失敗,而終端卻成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!