Probar expresiones `glob` de la misma manera que lo hace Gitea https://github.com/gobwas/glob
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test_glob/test_glob.go

83 lines
2.1 KiB

package main
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/gobwas/glob"
)
func main() {
// Default values
var targetDir string
var pattern string
// Check if running from command line (has arguments)
if len(os.Args) > 1 {
// Command line mode: use current directory and pattern from args
targetDir = "."
pattern = os.Args[1]
fmt.Printf("Command line mode: searching for pattern '%s' in current directory\n", pattern)
} else {
// VS Code/IDE mode: use hardcoded values
targetDir = `C:\Users\jalgaba\repos\sia-sipa-enlace`
pattern = "nbproject/**"
fmt.Printf("IDE mode: searching for pattern '%s' in %s\n", pattern, targetDir)
// Change to the target directory
err := os.Chdir(targetDir) //Change working directory
if err != nil {
log.Fatalf("failed to change directory to %s: %v", targetDir, err)
}
targetDir = "." // Now use current directory after chdir
}
// Compile the glob pattern
compiledPattern, err := glob.Compile(pattern)
if err != nil {
log.Fatalf("failed to compile glob pattern '%s': %v", pattern, err)
}
// Walk the directory tree
err = filepath.Walk(targetDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// Get relative path for pattern matching
// We need relative paths because glob patterns like "nbproject/**"
// are relative, not absolute paths
var relPath string
if targetDir == "." {
// When walking from current directory ".", filepath.Walk already
// gives us relative paths like "file.txt" or "subfolder/file.txt"
relPath = path
} else {
// When walking from an absolute path like "/home/user/project",
// filepath.Walk gives us absolute paths, so we need to convert
// them back to relative paths for pattern matching
var err error
relPath, err = filepath.Rel(targetDir, path)
if err != nil {
return err
}
}
// Normalize path separators and skip root directory
clean := filepath.ToSlash(relPath)
if clean == "." {
return nil
}
// Test against pattern
if compiledPattern.Match(clean) {
fmt.Println(clean)
}
return nil
})
if err != nil {
log.Fatalf("error walking path: %v", err)
}
}