Go에서 MV 와일드카드에 대한 Exec 명령이 실패하는 이유는 무엇입니까?
Go에서 exec 패키지를 사용하여 mv 명령을 실행하려고 하면, 명령에 여러 파일을 선택하기 위한 와일드카드 별표(*)가 포함되어 있으면 오류가 발생할 수 있습니다. 이 문제는 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: 셸 호출
또는 셸을 호출하여 와일드카드 확장을 수행하도록 할 수도 있습니다. . 수행 방법은 다음과 같습니다.
import ( "os/exec" ) cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir") output, err := cmd.CombinedOutput()
이 접근 방식은 셸 자체의 와일드카드 처리 기능을 활용합니다.
재귀적 파일 이동
필요한 경우 모든 파일을 한 디렉터리에서 다른 디렉터리로 반복적으로 이동하려면 filepath.Walk() 함수를 사용하여 소스 디렉터리를 찾아 각 하위 디렉터리와 파일에 대해 mv 명령을 실행합니다.
위 내용은 Go에서 `exec.Command('mv')`가 와일드카드로 인해 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!