package asaModels import ( "regexp" "strconv" "strings" "github.com/sirupsen/logrus" ) var ( FILEINFORE = regexp.MustCompile(`([0-9]+)\s+(\S+)\s+([0-9]+)\s+([0-9]+:.*?\s+\S+\s+[0-9]+\s+[0-9]+)\s+(.*?)(\n|$)`) ) type ( Disk struct { Disk string `json:"disk"` Files []*File `json:"files"` Free *int `json:"free_bytes"` TotalBytes *int `json:"total_bytes"` } File struct { Permission *string `json:"permisions"` Size *string `json:"size"` Date *string `json:"date"` FileName *string `json:"file name"` } ) func DirParse(s string) Disk { var d Disk d.Parse(s) return d } func (d *Disk) Parse(s string) { free := regexp.MustCompile(`(?i)([0-9]+)\s+bytes\s+free`).FindStringSubmatch(s) if len(free) > 0 { fInt, err := strconv.Atoi(free[1]) if err != nil { logrus.Error(err) } else { d.Free = &fInt } } size := regexp.MustCompile(`(?i)([0-9]+)\s+bytes\s+total`).FindStringSubmatch(s) if len(size) > 0 { sInt, err := strconv.Atoi(size[1]) if err != nil { logrus.Error(err) } else { d.TotalBytes = &sInt } } res := regexp.MustCompile(`directory of (\S+\d+)`).FindStringSubmatch(strings.ToLower(s)) if len(res) > 0 { d.Disk = res[1] } for _, v := range FILEINFORE.FindAllStringSubmatch(s, -1) { d.Files = append(d.Files, &File{ Permission: &v[2], Size: &v[3], Date: &v[4], FileName: &v[5], }) } } func (d *Disk) FindType(ext string) (fl []*File) { ext = strings.ToLower(ext) for _, f := range d.Files { if strings.Contains(strings.ToLower(*f.FileName), ext) { fl = append(fl, f) } } return } func (d *Disk) FileExist(fn string) bool { for _, f := range d.Files { if f.FileName == nil { continue } if *f.FileName == fn { return true } } return false }