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.
83 lines
2.1 KiB
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)
|
|
}
|
|
}
|
|
|