exec(files, options) {
    const self = this;
    files = files || ['.'];
    files = (!Array.isArray(files)) ? [files] : files;
    options = options || {};

    // If any version of --no-create is passed, change it to false.
    options.create = (options.create === true) ? false : options.create;

    // If --time is passed, ensure a valid param is called in
    // and map it to -a or -m, as this is the equivalent of these.
    // Throw an error if nothing valid passed.
    if (options.time) {
      const a = ['access', 'atime', 'use'];
      const m = ['modify', 'mtime'];
      const opt = (a.indexOf(options.time) > -1) ? 'a' :
        (m.indexOf(options.time) > -1) ? 'm' :
        undefined;
      if (!opt) {
        const error =
          `touch: invalid argument "${options.time}" for "--time"\n` +
          'Valid arguments are:\n' +
          '  - "atime", "access", "use"\n' +
          '  - "mtime", "modify"\n' +
          'Try \'touch --help\' for more information.';
        // I think this is the stupidest thing
        // I've ever written.
        try {
          throw new Error(error);
        } catch (e) {
          return touch.error.call(self, e);
        }
      } else {
        options[opt] = true;
      }
    }

    try {
      let err = false;
      for (let i = 0; i < files.length; ++i) {
        try {
          touch.file(files[i], options);
        } catch (e) {
          err = e;
          break;
        }
      }
      if (err) {
        return touch.error.call(self, err);
      }
      return 0;
    } catch (e) {
      return touch.error.call(self, e);
    }
  }
Main command execution.

@param {Object} args
@return {Object} { status, stdout }
@api public