code: def _recompress_archive(archive, verbosity=0, interactive=True):
      
      format, compression = get_archive_format(archive)
      if compression:
          # only recompress the compression itself (eg. for .tar.xz)
          format = compression
      tmpdir = util.tmpdir()
      tmpdir2 = util.tmpdir()
      base, ext = os.path.splitext(os.path.basename(archive))
      archive2 = util.get_single_outfile(tmpdir2, base, extension=ext)
      try:
          # extract
          kwargs = dict(verbosity=verbosity, format=format, outdir=tmpdir)
          path = _extract_archive(archive, **kwargs)
          # compress to new file
          olddir = os.getcwd()
          os.chdir(path)
          try:
              kwargs = dict(verbosity=verbosity, interactive=interactive, format=format)
              files = tuple(os.listdir(path))
              _create_archive(archive2, files, **kwargs)
          finally:
              os.chdir(olddir)
          # check file sizes and replace if new file is smaller
          filesize = util.get_filesize(archive)
          filesize2 = util.get_filesize(archive2)
          if filesize2 < filesize:
              # replace file
              os.remove(archive)
              shutil.move(archive2, archive)
              diffsize = filesize - filesize2
              return "... recompressed file is now %s smaller." % util.strsize(diffsize)
      finally:
          shutil.rmtree(tmpdir, onerror=rmtree_log_error)
          shutil.rmtree(tmpdir2, onerror=rmtree_log_error)
      return "... recompressed file is not smaller, leaving archive as is."
docs: Try to recompress an archive to smaller size.