diff --git a/Duplicati/Library/Backend/Idrivee2/Idrivee2Backend.cs b/Duplicati/Library/Backend/Idrivee2/Idrivee2Backend.cs
index db797a927..66d27e56b 100644
--- a/Duplicati/Library/Backend/Idrivee2/Idrivee2Backend.cs
+++ b/Duplicati/Library/Backend/Idrivee2/Idrivee2Backend.cs
@@ -236,7 +236,13 @@ namespace Duplicati.Library.Backend
///
public IAsyncEnumerable ListAsync(string path, CancellationToken cancellationToken)
- => m_s3Client.ListBucketAsync(m_bucket, path, false, cancellationToken);
+ {
+ var filterPath = GetFullKey(path);
+ if (!string.IsNullOrWhiteSpace(filterPath))
+ filterPath = Util.AppendDirSeparator(filterPath, "/");
+
+ return m_s3Client.ListBucketAsync(m_bucket, filterPath, true, cancellationToken);
+ }
///
diff --git a/Duplicati/Library/Backend/S3/S3Backend.cs b/Duplicati/Library/Backend/S3/S3Backend.cs
index 2136eedbc..91877df04 100644
--- a/Duplicati/Library/Backend/S3/S3Backend.cs
+++ b/Duplicati/Library/Backend/S3/S3Backend.cs
@@ -410,13 +410,9 @@ namespace Duplicati.Library.Backend
///
public IAsyncEnumerable ListAsync(string path, CancellationToken cancellationToken)
{
- var prefix = m_prefix;
- if (!string.IsNullOrWhiteSpace(prefix))
- prefix = Util.AppendDirSeparator(prefix);
-
- var filterPath = prefix + path;
+ var filterPath = GetFullKey(path);
if (!string.IsNullOrWhiteSpace(filterPath))
- filterPath = Util.AppendDirSeparator(filterPath);
+ filterPath = Util.AppendDirSeparator(filterPath, "/");
return s3Client.ListBucketAsync(m_bucket, filterPath, m_recurseLists, cancellationToken);
}
diff --git a/Duplicati/Library/SourceProvider/Builtin/BackendSourceFileEntry.cs b/Duplicati/Library/SourceProvider/Builtin/BackendSourceFileEntry.cs
index 95fe59f91..93bea7d8c 100644
--- a/Duplicati/Library/SourceProvider/Builtin/BackendSourceFileEntry.cs
+++ b/Duplicati/Library/SourceProvider/Builtin/BackendSourceFileEntry.cs
@@ -96,7 +96,7 @@ public class BackendSourceFileEntry(BackendSourceProvider parent, string path, b
if (!isFolder)
throw new InvalidOperationException("Enumerate can only be called on folders");
- return parent.WrappedBackend.ListAsync(path, cancellationToken)
+ return parent.WrappedBackend.ListAsync(NormalizePathTo(path, '/'), cancellationToken)
// Remove the current and parent folder entries
.Where(x => !string.IsNullOrWhiteSpace(x.Name) && x.Name != "." && x.Name != "..")
// Remove sub-folder entries