diff --git a/core/modules/file/src/Plugin/migrate/source/d7/File.php b/core/modules/file/src/Plugin/migrate/source/d7/File.php
index b801a36..ce72166 100644
--- a/core/modules/file/src/Plugin/migrate/source/d7/File.php
+++ b/core/modules/file/src/Plugin/migrate/source/d7/File.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\file\Plugin\migrate\source\d7;
 
+use Drupal\Core\Database\Query\Condition;
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 
@@ -44,9 +45,28 @@ class File extends DrupalSqlBase {
    * {@inheritdoc}
    */
   public function query() {
-    return $this->select('file_managed', 'f')
+    $query = $this->select('file_managed', 'f')
       ->fields('f')
       ->orderBy('timestamp');
+
+    // Filter by scheme(s), if configured.
+    if (isset($this->configuration['scheme'])) {
+      $schemes = array();
+      // Accept either a single scheme, or a list.
+      foreach ((array) $this->configuration['scheme'] as $scheme) {
+        $schemes[] = rtrim($scheme) . '://%';
+      }
+      $schemes = array_map([$this->getDatabase(), 'escapeLike'], $schemes);
+
+      // uri LIKE 'public://%' OR uri LIKE 'private://%'
+      $conditions = new Condition('OR');
+      foreach ($schemes as $scheme) {
+        $conditions->condition('uri', $scheme, 'LIKE');
+      }
+      $query->condition($conditions);
+    }
+
+    return $query;
   }
 
   /**
