Nav apraksta

explore.go 1.5KB

    package main import ( "flag" "fmt" "os" "os/exec" "path" "strings" ) var options struct { listFiles bool } var lsOpts = []string{"--color=auto", "--group-directories-first"} func init() { flag.BoolVar(&options.listFiles, "l", false, "Always list files") } func main() { flag.Parse() dir := "." if flag.NArg() > 0 { dir = flag.Arg(0) } f, err := os.Open(dir) if err != nil { fmt.Println("Error:", err) os.Exit(1) } fi, err := f.Stat() if err != nil { fmt.Println("Error:", err) os.Exit(1) } if options.listFiles { cmd := exec.Command("ls", dir) cmd.Args = append(cmd.Args, lsOpts...) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Run() } var cmd *exec.Cmd if fi.IsDir() { fis, err := f.Readdir(-1) if err != nil { fmt.Println("Error:", err) os.Exit(1) } var rs []string for _, fi := range fis { if fi.IsDir() { continue } if strings.HasPrefix(strings.ToLower(fi.Name()), "readme") { rs = append(rs, fi.Name()) } } if len(rs) == 0 { cmd = exec.Command("ls", dir) cmd.Args = append(cmd.Args, lsOpts...) } else { if options.listFiles { fmt.Println() } fmt.Printf("'%s':\n", rs[0]) cmd = exec.Command("head", "-n3", path.Join(dir, rs[0])) } } else { cmd = exec.Command("head", "-n3", path.Join(dir, f.Name())) } if options.listFiles && cmd.Path == "ls" { os.Exit(0) } cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Run() }