# File lib/automateit/shell_manager/portable.rb, line 473
  def touch(targets, opts={})
    like = opts.delete(:like)
    stamp = opts.delete(:stamp)
    quiet = opts.delete(:quiet) == true ? true : false
    time = \
      if stamp
        stamp
      elsif like
        begin
          File.stat(like).mtime
        rescue Errno::ENOENT => e
          if preview?
            Time.now
          else
            raise e
          end
        end
      else
        Time.now
      end

    unless quiet
      msg = "touch"
      msg << " --reference %s" % like if like
      msg << " --stamp %s" % stamp if stamp
      msg << " " << [targets].flatten.join(" ")
      log.info(PEXEC+msg)
    end

    results = []
    for target in [targets].flatten
      begin
        stat = File.stat(target)
        next if stat.mtime.to_i == time.to_i
      rescue Errno::ENOENT
        File.open(target, "a"){} unless preview?
      end
      File.utime(time, time, target) unless preview?
      results << target
    end

    return false if results.empty?
    return targets.is_a?(String) ? results.first : results
  end