**Describe the situation**

The author implemented it but enabled only for DiskS3.
CC @excitoon 
{
    for (const auto & key : keys)
    {
        auto head_result = headObject(source_bucket, key);
        auto object_metadata = head_result.GetMetadata();
        
        auto path_entry = object_metadata.find("path");
        if (path_entry == object_metadata.end())
        {
            
            LOG_WARNING(log, "Skip key {} because it doesn't have 'path' in metadata", key);
            continue;
        }
        const auto & path = path_entry->second;
        createDirectories(directoryPath(path));
        auto relative_key = shrinkKey(source_path, key);
        
        if (bucket != source_bucket || remote_fs_root_path != source_path)
            copyObject(source_bucket, key, bucket, remote_fs_root_path + relative_key, head_result);
        auto updater = [relative_key, head_result] (Metadata & metadata)
        {
            metadata.addObject(relative_key, head_result.GetContentLength());
            return true;
        };
        createUpdateAndStoreMetadata(path, false, updater);
        LOG_TRACE(log, "Restored file {}", path);
    }
}
void DiskS3::restoreFileOperations(const RestoreInformation & restore_information)