diff --git a/weed/filer/filer.go b/weed/filer/filer.go index 9fceb879c..dc182f92b 100644 --- a/weed/filer/filer.go +++ b/weed/filer/filer.go @@ -440,13 +440,9 @@ func (f *Filer) doListDirectoryEntries(ctx context.Context, p util.FullPath, sta var stopAtPath util.FullPath if strings.HasPrefix(string(p), f.DirBucketsPath+"/") { // S3 path: stop at the bucket root (e.g., /buckets/mybucket) - pathAfterBuckets := string(p)[len(f.DirBucketsPath)+1:] - parts := strings.SplitN(pathAfterBuckets, "/", 2) - if len(parts) > 0 { - stopAtPath = util.NewFullPath(f.DirBucketsPath, parts[0]) - } else { - stopAtPath = util.FullPath(f.DirBucketsPath) - } + pathAfterBuckets := strings.TrimPrefix(string(p), f.DirBucketsPath+"/") + bucketName, _, _ := strings.Cut(pathAfterBuckets, "/") + stopAtPath = util.NewFullPath(f.DirBucketsPath, bucketName) } else { // Non-S3 path: allow cleanup up to root stopAtPath = "/" diff --git a/weed/server/filer_grpc_server.go b/weed/server/filer_grpc_server.go index 6a2a3d28f..34c5eb773 100644 --- a/weed/server/filer_grpc_server.go +++ b/weed/server/filer_grpc_server.go @@ -305,7 +305,9 @@ func (fs *FilerServer) DeleteEntry(ctx context.Context, req *filer_pb.DeleteEntr if req.DeleteEmptyParentDirectories { stopAtPath := util.FullPath(req.DeleteEmptyParentDirectoriesStopPath) if stopAtPath == "" { - stopAtPath = util.FullPath(fs.filer.DirBucketsPath) + // Default to root to allow cleanup for non-S3 paths + // S3 API clients provide a specific bucket stop path + stopAtPath = "/" } // Clean up empty parent directories starting from req.Directory