【发布时间】:2022-01-15 02:48:40
【问题描述】:
我想使用纯 Go 复制文件,模仿 cp -p 的行为。
我的copy 函数目前看起来像:
// copy creates a copy of the file located at `dst` at `src`.
func copyFile(src, dst string) error {
in, err := os.Open(src)
if err != nil {
return err
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return err
}
_, err = io.Copy(out, in)
if err != nil {
out.Close()
return err
}
return out.Close()
}
这将创建由运行该进程的任何人拥有的dst。相反,我想保留src 的所有者和权限,即我从中得到什么:
// copy creates a copy of the file located at `dst` at `src`.
func copyFile(src, dst string) error {
cmd := exec.Command("cp", "-p", src, dst)
return cmd.Run()
}
但不必调用系统命令(为了便携性)。我尝试的一切最终都通过其他方式调用。这可以在 Go 中实现吗?
【问题讨论】: