Sha256: 926dfaf1aa3f24030638ff7b8bdc9c2fce8ee42f96ffb8b91f7d4a23a75144e1
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
require 'time' require 'net/ftp/list/parser' module Net class FTP module List # Parse Unix like FTP LIST entries. # # == MATCHES # # drwxr-xr-x 4 steve group 4096 Dec 10 20:23 etc # -rw-r--r-- 1 root other 531 Jan 29 03:26 README.txt # # == SYNOPSIS # # entry = Net::FTP::List::Unix.new('drwxr-xr-x 4 steve group 4096 Dec 10 20:23 etc') # entry.dir? # => true # entry.basename # => 'etc' class Unix < Parser # Stolen straight from the ASF's commons Java FTP LIST parser library. # http://svn.apache.org/repos/asf/commons/proper/net/trunk/src/java/org/apache/commons/net/ftp/ REGEXP = %r{ ([bcdlfmpSs-]) (((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-])))\+?\s+ (\d+)\s+ (\S+)\s+ (?:(\S+(?:\s\S+)*)\s+)? (\d+)\s+ ((?:\d+[-/]\d+[-/]\d+)|(?:\S+\s+\S+))\s+ (\d+(?::\d+)?)\s+ (\S*)(\s*.*) }x # Parse a Unix like FTP LIST entries. def initialize(raw) super(raw) match = REGEXP.match(raw.strip) or raise ParserError case match[1] when /d/ then @dir = true when /l/ then @symlink = true when /[f-]/ then @file = true when /[bc]/ then # Do nothing with devices for now. else ParserError 'Unknown LIST entry type.' end # TODO: Permissions, users, groups, date/time. @filesize = match[18].to_i @mtime = Time.parse("#{match[19]} #{match[20]}") @basename = match[21].strip # filenames with spaces will end up in the last match @basename += match[22] unless match[22].nil? # strip the symlink stuff we don't care about @basename.sub!(/\s+\->.+$/, '') if @symlink end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
net-ftp-list-2.1.1 | lib/net/ftp/list/unix.rb |