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