首頁 >後端開發 >Golang >為什麼 Go 中的 exec.Command('mv')` 因通配符而失敗,如何修復它?

為什麼 Go 中的 exec.Command('mv')` 因通配符而失敗,如何修復它?

Patricia Arquette
Patricia Arquette原創
2024-12-31 19:49:13358瀏覽

Why Does `exec.Command(

為什麼 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn