diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index d8f8097..2167f32 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -429,16 +429,13 @@
       Return an :class:`io.BufferedReader` object.
 
 
-.. method:: TarFile.add(name, arcname=None, recursive=True, exclude=None, *, filter=None)
+.. method:: TarFile.add(name, arcname=None, recursive=True, *, filter=None)
 
    Add the file *name* to the archive. *name* may be any type of file
    (directory, fifo, symbolic link, etc.). If given, *arcname* specifies an
    alternative name for the file in the archive. Directories are added
    recursively by default. This can be avoided by setting *recursive* to
-   :const:`False`. If *exclude* is given, it must be a function that takes one
-   filename argument and returns a boolean value. Depending on this value the
-   respective file is either excluded (:const:`True`) or added
-   (:const:`False`). If *filter* is specified it must be a keyword argument.  It
+   :const:`False`.  If *filter* is given, it
    should be a function that takes a :class:`TarInfo` object argument and
    returns the changed :class:`TarInfo` object. If it instead returns
    :const:`None` the :class:`TarInfo` object will be excluded from the
@@ -447,10 +444,6 @@
    .. versionchanged:: 3.2
       Added the *filter* parameter.
 
-   .. deprecated:: 3.2
-      The *exclude* parameter is deprecated, please use the *filter* parameter
-      instead.
-
 
 .. method:: TarFile.addfile(tarinfo, fileobj=None)
 
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index 411f916..e6dd5a1 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -139,6 +139,9 @@
 * Unknown escapes consisting of ``'\'`` and an ASCII letter in replacement
   templates for :func:`re.sub` will now cause an error.
 
+* Removed support of the *exclude* argument in :meth:`tarfile.TarFile.add`.
+  Use the *filter* argument instead.
+
 
 Porting to Python 3.7
 =====================
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 5d4c86c..c3777ff 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1897,13 +1897,12 @@
                     _safe_print("link to " + tarinfo.linkname)
             print()
 
-    def add(self, name, arcname=None, recursive=True, exclude=None, *, filter=None):
+    def add(self, name, arcname=None, recursive=True, *, filter=None):
         """Add the file `name' to the archive. `name' may be any type of file
            (directory, fifo, symbolic link, etc.). If given, `arcname'
            specifies an alternative name for the file in the archive.
            Directories are added recursively by default. This can be avoided by
-           setting `recursive' to False. `exclude' is a function that should
-           return True for each filename to be excluded. `filter' is a function
+           setting `recursive' to False. `filter' is a function
            that expects a TarInfo object argument and returns the changed
            TarInfo object, if it returns None the TarInfo object will be
            excluded from the archive.
@@ -1913,15 +1912,6 @@
         if arcname is None:
             arcname = name
 
-        # Exclude pathnames.
-        if exclude is not None:
-            import warnings
-            warnings.warn("use the filter argument instead",
-                    DeprecationWarning, 2)
-            if exclude(name):
-                self._dbg(2, "tarfile: Excluded %r" % name)
-                return
-
         # Skip if somebody tries to archive the archive...
         if self.name is not None and os.path.abspath(name) == self.name:
             self._dbg(2, "tarfile: Skipped %r" % name)
@@ -1953,7 +1943,7 @@
             if recursive:
                 for f in os.listdir(name):
                     self.add(os.path.join(name, f), os.path.join(arcname, f),
-                            recursive, exclude, filter=filter)
+                            recursive, filter=filter)
 
         else:
             self.addfile(tarinfo)
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 619cbc0..3c51c04 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -1145,33 +1145,6 @@
         finally:
             tar.close()
 
-    def test_exclude(self):
-        tempdir = os.path.join(TEMPDIR, "exclude")
-        os.mkdir(tempdir)
-        try:
-            for name in ("foo", "bar", "baz"):
-                name = os.path.join(tempdir, name)
-                support.create_empty_file(name)
-
-            exclude = os.path.isfile
-
-            tar = tarfile.open(tmpname, self.mode, encoding="iso8859-1")
-            try:
-                with support.check_warnings(("use the filter argument",
-                                             DeprecationWarning)):
-                    tar.add(tempdir, arcname="empty_dir", exclude=exclude)
-            finally:
-                tar.close()
-
-            tar = tarfile.open(tmpname, "r")
-            try:
-                self.assertEqual(len(tar.getmembers()), 1)
-                self.assertEqual(tar.getnames()[0], "empty_dir")
-            finally:
-                tar.close()
-        finally:
-            support.rmtree(tempdir)
-
     def test_filter(self):
         tempdir = os.path.join(TEMPDIR, "filter")
         os.mkdir(tempdir)
diff --git a/Misc/NEWS b/Misc/NEWS
index 71191ba..cad523a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -212,6 +212,9 @@
 Library
 -------
 
+- Issue #29210:  Removed support of deprecated argument "exclude" in
+  tarfile.TarFile.add().
+
 - Issue #29219: Fixed infinite recursion in the repr of uninitialized
   ctypes.CDLL instances.
 
