cmd_dir.go 976 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. // 显示目录内容
  7. func cmd_dir(fields []string, stdin *os.File, stdout *os.File, stderr *os.File) {
  8. if len(fields) == 1 { // 如果没有指定目录,则显示当前目录
  9. fields = []string{fields[0], "."}
  10. }
  11. for i, dir := range fields[1:] { // 遍历参数
  12. files, err := os.ReadDir(dir) // 获取目录内容
  13. if err != nil {
  14. panic(err)
  15. }
  16. if len(fields) > 2 { // 如果要显示多个目录
  17. if i > 0 {
  18. fmt.Fprintln(stdout)
  19. }
  20. fmt.Fprintf(stdout, "%s:\n", dir) // 则输出提示
  21. }
  22. for _, file := range files { // 遍历文件
  23. info, err := file.Info() // 获取文件信息
  24. if err != nil {
  25. panic(err)
  26. }
  27. if info.IsDir() { // 根据文件信息显示不同颜色
  28. fmt.Fprintf(stdout, "\033[94m%s\033[0m\n", file.Name())
  29. } else if info.Mode()&0111 > 0 {
  30. fmt.Fprintf(stdout, "\033[92m%s\033[0m\n", file.Name())
  31. } else {
  32. fmt.Fprintln(stdout, file.Name())
  33. }
  34. }
  35. }
  36. }