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) } }