首頁 > 後端開發 > Golang > 為什麼我的 Go `exec.Command` 由於通配符而失敗,而終端卻成功?

為什麼我的 Go `exec.Command` 由於通配符而失敗,而終端卻成功?

Patricia Arquette
發布: 2024-12-08 09:27:12
原創
355 人瀏覽過

Why Does My Go `exec.Command` Fail with Wildcards While the Terminal Succeeds?

儘管終端成功,Golang Exec 指令仍因通配符失敗

在 Go 中,exec 套件用於執行外部命令。嘗試使用萬用字元 ('./source-dir/*') 執行「mv」指令時,會出現「退出狀態 1」錯誤,輸出顯示「沒有此類檔案或目錄」。然而,在帶有通配符的終端機中運行相同的命令會成功。

為什麼通配符在 Go 中失敗

與 shell 不同,shell 解釋通配符並將其擴展為匹配的清單檔案中,exec 套件將通配符字面上視為單一參數。這意味著“mv”命令看到的是通配符(“*”)而不是檔案名稱列表。

要在Go 中使用通配符,有兩種方法:

  1. 使用filepath.Glob():此函數此函數傳回包含以下內容的字串切片給定模式的符合檔案名稱清單。然後,您可以使用此清單作為“mv”命令的參數。
import "path/filepath"

files, err := filepath.Glob("./source-dir/*")
if err != nil {
    // Handle error
}

cmd := exec.Command("mv", files...)
登入後複製
  1. 呼叫 Shell:您可以呼叫 shell 並將指令傳遞為一個參數,讓 shell解釋通配符並將其擴展為適當的列表
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
登入後複製

遞歸檔案移動

要將所有檔案從來源目錄遞歸移至目標目錄,您需要遞歸地迭代來源目錄,然後移動找到的每個檔案或目錄。如果來源包含子目錄,您可以遞歸地移動每個子目錄,或者使用像 os 這樣提供移動樹功能的套件。

以上是為什麼我的 Go `exec.Command` 由於通配符而失敗,而終端卻成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板