command/ls.go

122 lines
2.8 KiB
Go

// Package command ...
//
// Description : command ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-05-20 22:34
package command
import (
"fmt"
"strings"
"git.zhangdeman.cn/zhangdeman/command/define"
)
// NewLs ls命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:36 2022/5/20
func NewLs(workDir string) *ls {
return &ls{
workDir: workDir,
paramList: []string{"-l"},
}
}
type ls struct {
workDir string
paramList []string
isRecursive bool // 是否递归查询
}
// ShowHideFile 显示隐藏文件
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:38 2022/5/20
func (l *ls) ShowHideFile() *ls {
l.paramList = append(l.paramList, "-a")
return l
}
// Recursive 递归查看所有目录下的文件
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:38 2022/5/20
func (l *ls) Recursive() *ls {
l.paramList = append(l.paramList, "-R")
return l
}
// Run 执行命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:59 2022/5/20
func (l *ls) Run() (*define.Result, []define.LsFileInfo) {
result := Execute(l.workDir, "ls", l.paramList)
if nil != result.Error {
return result, make([]define.LsFileInfo, 0)
}
resultStr := string(result.Output)
fileList := strings.Split(resultStr, "\n")
for _, item := range fileList {
if item == "." || item == ".." || len(item) == 0 {
// 忽略 . 和 ..
continue
}
itemArr := strings.Split(item, " ")
if strings.ToLower(itemArr[0]) == "total" {
// 过滤掉对于文件总数的输出
continue
}
l.parseFileInfo(item)
}
return result, nil
}
// parseFileInfo 解析文件信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:35 2022/6/27
func (l *ls) parseFileInfo(fileLine string) *define.LsFileInfo {
fileInfoArr := strings.Split(fileLine, " ")
fmt.Println("文件信息 : ", fileInfoArr)
fmt.Println(l.getFilePermission(fileInfoArr[0]))
return nil
}
// getFilePermission 解析文件权限信息 , 根据 drwxrwxrwx 这个规范解析
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 17:37 2022/6/27
func (l *ls) getFilePermission(permissionLayout string) (bool, bool, *define.FullPermission) {
permissionArr := strings.Split(permissionLayout, "")
if len(permissionArr) < 10 {
return false, false, nil
}
return permissionArr[0] == "l", permissionArr[0] == "d", &define.FullPermission{
User: define.FilePermission{
Read: permissionArr[1] == "r",
Write: permissionArr[2] == "w",
Exec: permissionArr[3] == "x",
},
Group: define.FilePermission{
Read: permissionArr[4] == "r",
Write: permissionArr[5] == "w",
Exec: permissionArr[6] == "x",
},
Other: define.FilePermission{
Read: permissionArr[7] == "r",
Write: permissionArr[8] == "w",
Exec: permissionArr[9] == "x",
},
}
}