代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"log"
"os"
"strings"
)
type File struct {
Name string `json:"name"`
Path string `json:"path"`
IsDir bool `json:"is_dir"`
Child []File `json:"child"`
}
func getDirFiles(path string, deep bool) ([]File, error) {
var files []File
entries, err := os.ReadDir(path)
if err != nil {
return files, err
}
for _, dirEntity := range entries {
if dirEntity.Name() == ".git" || dirEntity.Name() == ".gitignore" || dirEntity.Name() == ".vscode" {
continue
}
var entity = File{
Name: dirEntity.Name(),
IsDir: dirEntity.IsDir(),
Path: path,
}
// 不获取字子目录以及文件
if deep {
if dirEntity.IsDir() {
child, _ := getDirFiles(fmt.Sprintf("%s/%s", path, dirEntity.Name()), deep)
entity.Child = append(entity.Child, child...)
}
}
files = append(files, entity)
}
return files, nil
}
// createDirAndFile 创建目录以及文件
func createDirAndFile(files []File, writeDir string) {
for _, v := range files {
filePath := fmt.Sprintf("%s/%s", v.Path, v.Name)
dir := strings.ReplaceAll(filePath, "/Users/oo7/Developer/demo-code/", "")
if v.IsDir {
// 如果是目录,创建目录,并获取目录下面的文件
makeDir := fmt.Sprintf("%s/%s", writeDir, dir)
if err := os.MkdirAll(makeDir, os.ModePerm); err != nil {
log.Fatalln(err)
return
}
fs, _ := getDirFiles(filePath, false)
createDirAndFile(fs, writeDir)
} else {
filename := fmt.Sprintf("%s/%s", writeDir, dir)
file, err := os.Create(filename)
if err != nil {
log.Fatalln(err)
return
}
defer file.Close()
// 读取远程文件的内容
data, err := os.ReadFile(filePath)
if err != nil {
log.Fatalln(err)
return
}
if _, err := file.Write(data); err != nil {
log.Fatalln(err)
return
}
}
}
}
func main() {
files, _ := getDirFiles("/Users/oo7/Developer/demo-code", false)
// rest, err := json.Marshal(files)
// if err != nil {
// log.Fatal(err)
// }
// fmt.Printf("%+v \n", string(rest))
createDirAndFile(files, "/tmp/111111")
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。