diff --git a/core/modules/update/tests/src/Functional/UpdateCoreTest.php b/core/modules/update/tests/src/Functional/UpdateCoreTest.php
index 7ceaa0abae2582e5e2cf48c676175e5bd82d250c..dec4022615abc8718c4f582026588593be2e9cbc 100644
--- a/core/modules/update/tests/src/Functional/UpdateCoreTest.php
+++ b/core/modules/update/tests/src/Functional/UpdateCoreTest.php
@@ -385,6 +385,23 @@ public function testModulePageRunCron() {
     $this->assertNoText(t('No update information available.'));
   }
 
+  /**
+   * Checks that clearing the disk cache works.
+   */
+  public function testClearDiskCache() {
+    $directories = [
+      _update_manager_cache_directory(FALSE),
+      _update_manager_extract_directory(FALSE),
+    ];
+    // Check that update directories does not exists.
+    foreach ($directories as $directory) {
+      $this->assertDirectoryNotExists($directory);
+    }
+
+    // Method must not fail if update directories do not exists.
+    update_clear_update_disk_cache();
+  }
+
   /**
    * Checks the messages at admin/modules when the site is up to date.
    */
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index 4b7613d49a22ba90492eab2015cf45b99dcf802a..ca05e95545e95374c133515a3de544175e9ed1a3 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -806,7 +806,9 @@ function update_clear_update_disk_cache() {
 
   // Search for files and directories in base folder only without recursion.
   foreach ($directories as $directory) {
-    \Drupal::service('file_system')->scanDirectory($directory, '/.*/', ['callback' => 'update_delete_file_if_stale', 'recurse' => FALSE]);
+    if (is_dir($directory)) {
+      \Drupal::service('file_system')->scanDirectory($directory, '/.*/', ['callback' => 'update_delete_file_if_stale', 'recurse' => FALSE]);
+    }
   }
 }