[go] 디렉토리 구조 내의 파일 매칭

파일 매칭이란 특정 패턴과 일치하는 파일을 찾는 과정을 의미합니다. Go 언어를 사용하여 디렉토리 구조 내의 파일을 매칭하는 방법에 대해 알아보겠습니다.

filepath 패키지 활용

Go 언어에서는 filepath 패키지를 활용하여 디렉토리 구조 내의 파일을 찾을 수 있습니다. filepath 패키지에는 다양한 함수와 메서드가 있어 파일 매칭을 위한 유용한 도구를 제공합니다.

예제 코드

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	root := "/path/to/directory"
	pattern := "*.txt"

	err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() {
			matched, err := filepath.Match(pattern, filepath.Base(path))
			if err != nil {
				return err
			}
			if matched {
                fmt.Println(path)
			}
		}
		return nil
	})
	if err != nil {
		fmt.Println(err)
	}
}

위의 예제 코드는 filepath.Walk를 사용하여 지정된 디렉토리 안의 모든 파일을 재귀적으로 탐색하고, 지정된 패턴과 일치하는 파일을 출력합니다.

정규표현식 활용

또 다른 방법으로는 정규표현식을 사용하여 파일을 매칭할 수 있습니다. Go 언어는 regexp 패키지를 통해 정규표현식을 제공하므로, 이를 활용하여 파일 매칭을 간단히 구현할 수 있습니다.

예제 코드

package main

import (
	"fmt"
	"os"
	"path/filepath"
	"regexp"
)

func main() {
	root := "/path/to/directory"
	pattern := ".*\\.txt$"

	err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() {
			matched, err := regexp.MatchString(pattern, filepath.Base(path))
			if err != nil {
				return err
			}
			if matched {
                fmt.Println(path)
			}
		}
		return nil
	})
	if err != nil {
		fmt.Println(err)
	}
}

위의 예제 코드는 regexp.MatchString을 사용하여 정규표현식과 파일명을 비교하여 일치하면 파일을 출력합니다.

결론

Go 언어를 사용하여 디렉토리 구조 내의 파일을 매칭하는 방법에 대해 알아보았습니다. filepath 패키지를 사용한 파일 매칭과 정규표현식을 활용한 파일 매칭 모두 유용한 방법이며, 상황에 맞게 선택하여 활용할 수 있습니다.

참고 문헌: