在Go 和Bash 中執行mv 指令的方式不同
在Go 中,使用exec 套件執行mv 指令可能會導致使用時出現問題命令參數中的通配符如“*”。雖然該命令在終端機中按預期工作,但星號通配符似乎在 Go 腳本中不起作用。
這種差異的原因在於 shell 和 Go 處理指令參數的方式。在終端機中,shell 解釋通配符並將其替換為匹配檔案名稱清單。但是,在 Go 中,命令會作為字串傳遞,並且它會將通配符視為參數的一部分。
要解決這個問題,您有兩個選項:
手動擴充通配符
你可以使用Go的filepath.Glob函數來取得與通配符匹配的檔案清單模式,然後將各個檔案名稱作為參數傳遞給exec.Command。例如:
files, err := filepath.Glob("./source-dir/*") if err != nil { // Error handling } cmd := exec.Command("mv", files, "./dest-dir")
使用 Shell 呼叫
您可以呼叫 shell 本身來執行帶有通配符的 mv 指令。 shell 將解釋通配符並將擴充參數傳遞給 mv 指令。例如:
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
透過使用其中一種方法,您可以確保在 Go 腳本中正確處理通配符,從而允許您按預期執行 mv 命令。
以上是為什麼帶通配符的「mv」在 Go 和 Bash 中表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!