加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang给目录按时间排序.正则、时间条件搜索文件

发布时间:2020-12-16 18:32:55 所属栏目:大数据 来源:网络整理
导读:package mainimport ("fmt""io/ioutil""os""path/filepath""regexp""sort""strings""time")func main() {var i FindFiles = FindFiles{"AutoUpdate",false,true}//list,err := i.RegFindFile("log.*")//fmt.Println(list,err)list,err := i.DateFindFile(30)
package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"regexp"
	"sort"
	"strings"
	"time"
)

func main() {
	var i FindFiles = FindFiles{"AutoUpdate",false,true}
	//	list,err := i.RegFindFile("log.*")
	//	fmt.Println(list,err)
	list,err := i.DateFindFile(30)
	fmt.Println(list,err)
}

type FindFiles struct {
	Path     string `json:path`
	FullDir  bool   `json:fulldir`
	MatchDir bool   `json:matchdir`
}

func (self FindFiles) DateFindFile(date int64) ([]string,error) {
	date = date * 24 * 60 * 60
	var less bool
	switch {
	case date <= 0:
		date = time.Now().Unix() + date
		less = true
	case date > 0:
		date = time.Now().Unix() - date
		less = false
	}
	return datewalk(date,less,self.MatchDir,self.Path)
}

func (self FindFiles) RegFindFile(reg string) ([]string,error) {
	if strings.Index(reg,"*") == 0 {
		reg = "." + reg
	} else {
		reg = "^" + reg
	}
	reg += "$"
	Reg,err := regexp.Compile(reg)
	if err != nil {
		return []string{},nil
	}
	if self.FullDir {
		return namewalk(Reg,self.Path)
	}
	var list []string
	infos,err := readDir(self.Path)
	if err != nil {
		return list,nil
	}
	path := filepath.ToSlash(self.Path)
	if !strings.HasSuffix(path,"/") {
		path += "/"
	}
	for _,v := range infos {
		if Reg.MatchString(v.Name()) {
			list = append(list,path+v.Name())
		}
	}
	return list,nil
}
func datewalk(date int64,less bool,matchdir bool,path string) ([]string,error) {
	var list []string
	return list,filepath.Walk(path,func(root string,info os.FileInfo,err error) error {
		if err != nil {
			return err
		}
		if less {
			if date > info.ModTime().Unix() {
				return nil
			}
		} else {
			if date < info.ModTime().Unix() {
				return nil
			}
		}
		root = filepath.ToSlash(root)
		if info.IsDir() {
			if matchdir {
				list = append(list,root)
				return nil
			}
			return nil
		}
		list = append(list,root)
		return nil
	})
}

func namewalk(reg *regexp.Regexp,err error) error {
		if err != nil {
			return err
		}
		if !reg.MatchString(info.Name()) {
			return nil
		}
		root = filepath.ToSlash(root)
		if info.IsDir() {
			if matchdir {
				list = append(list,root)
		return nil
	})
}

type fileInfo []os.FileInfo

func (self fileInfo) Less(i,j int) bool {
	return self[i].ModTime().Unix() > self[j].ModTime().Unix()
}
func (self fileInfo) Len() int {
	return len(self)
}
func (self fileInfo) Swap(i,j int) {
	self[i],self[j] = self[j],self[i]
}

func ReadDir(path string) ([]os.FileInfo,error) {
	list,err := readDir(path)
	if err != nil {
		return nil,err
	}
	sort.Sort(fileInfo(list))
	return list,err
}

func readDir(path string) ([]os.FileInfo,error) {
	info,err := os.Stat(path)
	if err != nil {
		return nil,err
	}
	if info.IsDir() {
		return ioutil.ReadDir(path)
	}
	return []os.FileInfo{info},nil
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读