答案:使用Go的os包可实现带时间戳的文件或目录备份。先用os.Stat判断路径类型,文件则通过os.Open和os.Create配合io.Copy复制并保留权限;目录则用os.ReadDir读取内容,os.MkdirAll创建目标路径,递归处理子项;最后用time.Now().Format生成时间戳命名目标目录,避免覆盖。需注意关闭文件、错误处理和路径存在性。

用Go语言的标准库
os包可以轻松实现一个简单的文件或目录备份工具。核心思路是读取源路径,判断其类型(文件或目录),然后递归复制内容到目标路径,并添加时间戳避免覆盖。
1. 判断路径类型并处理
使用
os.Stat获取文件信息,通过
os.FileInfo判断是文件还是目录:
os.Stat(path)
返回文件状态信息os.FileInfo.IsDir()
判断是否为目录- 根据类型调用不同的处理函数
2. 实现文件复制
单个文件的复制可通过
os.Open和
os.Create完成,再用
io.Copy传输数据: 注意:需确保目标目录存在,否则创建失败。
- 打开源文件:
src, err := os.Open(srcPath)
- 创建目标文件:
dst, err := os.Create(dstPath)
- 复制内容:
io.Copy(dst, src)
- 复制后关闭文件并保留原始文件权限(可通过
os.Chmod
设置)
3. 递归复制目录
对于目录,先用
os.ReadDir读取条目,再逐个处理子项:
立即学习“go语言免费学习笔记(深入)”;
- 创建目标目录:
os.MkdirAll
确保路径完整 - 遍历子项,对每个条目判断类型
- 文件直接复制,目录则递归调用自身
4. 添加时间戳命名备份
为避免覆盖,目标路径可加入时间戳:
例如:backup_20250405_143210
- 使用
time.Now().Format("20060102_150405")生成时间字符串 - 拼接到目标目录名中
基本上就这些。只要结合
os包的文件操作和简单的递归逻辑,就能实现一个轻量可靠的备份工具,不需要引入外部依赖。关键在于处理好路径判断、目录创建和权限保留。不复杂但容易忽略细节,比如关闭文件和错误处理。










