Todd Beverly [EMAIL PROTECTED] wrote:
>[EMAIL PROTECTED] wrote:
>>At one point in my script, I still use ls to get a line of data for files,

>>what I'm trying for is a regexp that'll pull the filename out--including 
>>soft links. What I have right now--while it works--is rather, um, long:
>>
>>$line =~ 
>>/^[-l][-rswx]{9}\s+\d+\s+\w+\s+\w+\s+\d+\s+\w+\s+\d+\s+(?:\d{4}|\d\d:\d\d)
\s+(.*)$/;
>>
>>I had a shorter regexp, actually *much* shorter:
>>
>>$line =~ /^.+(?:\d{4}|\d\d:\d\d)\s+(.*)$/;
>>
>The long ls on my machine  looks like it's a fixed format.  It's 53 
>characters from the line start to the first character of the time, so 
>start  the regexp with the exact number of  "any" characters :
>
>$line =~ /^.{52}(\d\d:\d\d)\s+(.*)$/;
>
>Either that or use unpack:
>my ($time, $name) = unpack("x52a5xa*", $line);
>
>>
>>but it ran into a problem with the following file line:
>>
>>lrwxrwxrwx ... Sep 10 15:15 1614 -> /opt/K/SCO/...1614
>>
>>It tripped on the 1614 and returned only "-> /opt/K/SCO/...1614" as the 
>>filename. Anyone have any suggestions for shortening that monster regexp 
>>listed above?

First off, I think Todd is off on his 53 characters (at least
from my tests). My test shows that the HH:MM of the mtime starts
at 51 characters in. This is true for Cygwin, Solaris, and Linux.

  > ls -l z
  -rw-rw-r--    1 marms    marms          30 Sep  3 16:01 z
           1         2         3         4         5         6
  123456789012345678901234567890123456789012345678901234567890

Also, if you have a big file (over 99,999,999 bytes), you will 
find that the size gets jammed in and upsets the nice columns.
Thus for big files, the HH:MM will start later (depending on how 
many extra digits it takes to represent the file size):

  > ls -l TheOpenCD-v1.4.iso.zip TheOpenCD-v1.4.iso.zip.md5
  -r--r--r--    1 marms    marms    279681009 May  3 14:53
TheOpenCD-v1.4.iso.zip
  -r--r--r--    1 marms    marms          57 May  3 14:53
TheOpenCD-v1.4.iso.zip.md5
           1         2         3         4         5         6
  123456789012345678901234567890123456789012345678901234567890

So this solution is not safe.

--
Mike Arms

_______________________________________________
ActivePerl mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to