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