>백엔드 개발 >Golang >터미널이 성공하는 동안 내 Go `exec.Command`가 와일드카드를 사용하여 실패하는 이유는 무엇입니까?

터미널이 성공하는 동안 내 Go `exec.Command`가 와일드카드를 사용하여 실패하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-08 09:27:12363검색

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

터미널 성공에도 불구하고 와일드카드를 사용한 Golang Exec 명령 실패

Go에서는 exec 패키지를 사용하여 외부 명령을 실행합니다. 와일드카드('./source-dir/*')를 사용하여 'mv' 명령을 실행하려고 하면 "해당 파일 또는 디렉터리가 없습니다."라는 출력과 함께 "종료 상태 1" 오류가 발생합니다. 그러나 와일드카드를 사용하여 터미널에서 동일한 명령을 실행하면 성공합니다.

Go에서 와일드카드가 실패하는 이유

쉘과 달리 쉘이 와일드카드를 해석하고 이를 일치하는 목록으로 확장합니다. 파일에서 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. 셸 호출: 셸을 호출하고 명령을 다음과 같이 전달할 수 있습니다. 쉘이 와일드카드를 해석하고 이를 적절한 목록으로 확장할 수 있도록 하는 인수 인수.
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")

재귀적 파일 이동

모든 파일을 소스 디렉터리에서 대상 디렉터리로 재귀적으로 이동하려면 소스 디렉터리를 재귀적으로 반복하고 이동해야 합니다. 발견된 각 파일이나 디렉터리. 소스에 하위 디렉터리가 포함된 경우 각 하위 디렉터리를 재귀적으로 이동하거나 트리 이동 기능을 제공하는 os와 같은 패키지를 사용할 수 있습니다.

위 내용은 터미널이 성공하는 동안 내 Go `exec.Command`가 와일드카드를 사용하여 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.