func walkDir(client *hdfs.Client, dir string, visit walkFunc) error { dirReader, err := client.Open(dir) if err != nil { return err } var partial []os.FileInfo for ; err != io.EOF; partial, err = dirReader.Readdir(100) { if err != nil { return err } for _, child := range partial { childPath := path.Join(dir, child.Name()) visit(childPath, child) if child.IsDir() { err = walkDir(client, childPath, visit) if err != nil { return err } } } } return nil }
func printDir(client *hdfs.Client, dir string, long, all, humanReadable bool) { dirReader, err := client.Open(dir) if err != nil { fatal(err) } var tw *tabwriter.Writer if long { tw = lsTabWriter() defer tw.Flush() } if all { if long { dirInfo, err := client.Stat(dir) if err != nil { fatal(err) } parentPath := path.Join(dir, "..") parentInfo, err := client.Stat(parentPath) if err != nil { fatal(err) } printLong(tw, ".", dirInfo, humanReadable) printLong(tw, "..", parentInfo, humanReadable) } else { fmt.Println(".") fmt.Println("..") } } var partial []os.FileInfo for ; err != io.EOF; partial, err = dirReader.Readdir(100) { if err != nil { fatal(err) } printFiles(tw, partial, long, all, humanReadable) } if long { tw.Flush() } }
func duDir(client *hdfs.Client, tw *tabwriter.Writer, dir string, humanReadable bool) int64 { dirReader, err := client.Open(dir) if err != nil { fmt.Fprintln(os.Stderr, err) return 0 } var partial []os.FileInfo var dirSize int64 for ; err != io.EOF; partial, err = dirReader.Readdir(100) { if err != nil { fmt.Fprintln(os.Stderr, err) return dirSize } for _, child := range partial { childPath := path.Join(dir, child.Name()) info, err := client.Stat(childPath) if err != nil { fmt.Fprintln(os.Stderr, err) return 0 } var size int64 if info.IsDir() { size = duDir(client, tw, childPath, humanReadable) } else { size = info.Size() } printSize(tw, size, childPath, humanReadable) dirSize += size } } return dirSize }