code: func (s *Store) Move(ctx context.Context, from string, to string) error {
  	// recursive move?
  	if s.IsDir(ctx, from) {
  		if s.Exists(ctx, to) {
  			return errors.Errorf("Can not move dir to file")
  		}
  		sf, err := s.List(ctx, "")
  		if err != nil {
  			return errors.Wrapf(err, "failed to list store")
  		}
  		destPrefix := to
  		if s.IsDir(ctx, to) {
  			destPrefix = filepath.Join(to, filepath.Base(from))
  		}
  		for _, e := range sf {
  			if !strings.HasPrefix(e, strings.TrimSuffix(from, "/")+"/") {
  				continue
  			}
  			et := filepath.Join(destPrefix, strings.TrimPrefix(e, from))
  			if err := s.Move(ctx, e, et); err != nil {
  				out.Error(ctx, "Failed to move '%s' to '%s': %s", e, et, err)
  			}
  		}
  		return nil
  	}
  
  	content, err := s.Get(ctx, from)
  	if err != nil {
  		return errors.Wrapf(err, "failed to decrypt '%s'", from)
  	}
  	if err := s.Set(ctx, to, content); err != nil {
  		return errors.Wrapf(err, "failed to write '%s'", to)
  	}
  	if err := s.Delete(ctx, from); err != nil {
  		return errors.Wrapf(err, "failed to delete '%s'", from)
  	}
  	return nil
  }
docs: // Move moves one or many secrets