package fsutil import ( "os" "path/filepath" "golang.org/x/xerrors" ) type SizeInfo struct { OnDisk int64 } // FileSize returns bytes used by a file or directory on disk func FileSize(path string) (SizeInfo, error) { var size int64 err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { if err != nil { return err } if !info.IsDir() { size += info.Size() } return err }) if err != nil { if os.IsNotExist(err) { return SizeInfo{}, os.ErrNotExist } return SizeInfo{}, xerrors.Errorf("filepath.Walk err: %w", err) } return SizeInfo{size}, nil }