code: def do_cp(self, params):
          
          try:
              self.copy(params, params.recursive, params.overwrite, params.max_items, False)
          except AuthFailedError:
              self.show_output("Authentication failed.")
docs: \x1b[1mNAME\x1b[0m
          cp - Copy from/to local/remote or remote/remote paths
  
  \x1b[1mSYNOPSIS\x1b[0m
          cp <src> <dst> [recursive] [overwrite] [asynchronous] [verbose] [max_items]
  
  \x1b[1mDESCRIPTION\x1b[0m
          src and dst can be:
  
             /some/path (in the connected server)
             zk://[scheme:user:passwd@]host/<path>
             json://!some!path!backup.json/some/path
             file:///some/file
  
          with a few restrictions. Given the semantic differences that znodes have with filesystem
          directories recursive copying from znodes to an fs could lose data, but to a JSON file it
          would work just fine.
  
  \x1b[1mOPTIONS\x1b[0m
          * recursive: recursively copy src (default: false)
          * overwrite: overwrite the dst path (default: false)
          * asynchronous: do asynchronous copies (default: false)
          * verbose: verbose output of every path (default: false)
          * max_items: max number of paths to copy (0 is infinite) (default: 0)
  
  \x1b[1mEXAMPLES\x1b[0m
          > cp /some/znode /backup/copy-znode  # local
          > cp /some/znode zk://digest:bernie:pasta@10.0.0.1/backup true true
          > cp /some/znode json://!home!user!backup.json/ true true
          > cp file:///tmp/file /some/zone  # fs to zk