nVIDIAsucks Skrevet 27. november 2003 Del Skrevet 27. november 2003 (endret) Jeg er ganske amatør når det gjelder perl, så jeg sliter litt med å lage et program/en funksjon som gjør det samme som ls -l og som samtidig er platformuavhengig . Hadde vært kult om noen kunne hjelpe Endret 27. november 2003 av nVIDIAsucks Lenke til kommentar
Torbjørn Skrevet 27. november 2003 Del Skrevet 27. november 2003 (endret) #!/usr/bin/perl # enten har vi katalog på kommandolinja, ellers kjører vi denne katalogen $dir = shift || '*'; # pynter litt på, slik at vi får ut filene i en katalog og ikke bare katalogen selv $dir .= '/' if -d $dir and $dir !~ m|/$|; $dir .= '*' if -d $dir; # leser ut fil(ene) i en liste @files = glob $dir; # filrettigheter ser slik ut @perms = ( # 0 1 2 3 4 5 6 7 '---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx' ); # looper gjennom lista foreach $file (@files){ # henter ut filinfo # 'perldoc -f stat' på kommandolinje for mer info ($dev,$ino,$mode,$nl,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat $file; # finner permissions # perl magic :) $perms = $mode & 07777; # @oct_perms vil nå inneholde f.eks ('6','4','4') @oct_perms = (split //,sprintf "%lo", $perms)[-3 .. -1]; # hvis directory, skal første char være en 'd' if(-d $file){ $modes = 'd'; } # ... ellers en '-' else{ $modes = '-'; } # henter ut riktig streng utfra tallet. # se lenger oppe. foreach(@oct_perms){ $modes .= $perms[$_]; } # henter ut brukernavn og gruppenavn $user = getpwuid $uid; $group = getgrgid $gid; # Gjør om dato/tid til 'human readable'. # 'scalar localtime' er på formen: # "Thu Nov 26 12:01:36 2003" # Koden nedenfor henter ut måned, dato, tid og år (element 1 til 4) ($m,$d,$h,$year) = (split /\s+/,scalar localtime $mtime)[1..4]; # fjerner sekunder fra time stamp, vil bare ha hh:mm $h =~ s/:..$//; # hvis alderen er større en 6 md, viser vi årstall istedet for klokkeslett $h = $year if(time > $mtime + 60*60*24*30*6); # skriver ut dataene i henhold til format definijsonen nedenfor write; } format STDOUT = @<<<<<<<<< @>>> @<<<<<<< @<<<<<<< @>>>>>>> @<< @> @>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $modes, $nl, $user, $group, $size, $m, $d,$h, $file . Endret 27. november 2003 av Torbjørn Lenke til kommentar
Torbjørn Skrevet 27. november 2003 Del Skrevet 27. november 2003 merk at etter "format STDOUT" skal "@<<<"-koden på en linje, ikke to (pga html formatering det blir sånn) Lenke til kommentar
nVIDIAsucks Skrevet 27. november 2003 Forfatter Del Skrevet 27. november 2003 Tusen millioner takk Torbjørn Lenke til kommentar
Torbjørn Skrevet 27. november 2003 Del Skrevet 27. november 2003 når det gjelder kross-plattform uavhengighet, så slet den litt på windows, får ikke hentet ut brukernavnet for visning. ikke alle platformer som har sammenlignbart filsystem vil jeg tro. Lenke til kommentar
DrDoogie Skrevet 28. november 2003 Del Skrevet 28. november 2003 når det gjelder kross-plattform uavhengighet, så slet den litt på windows, får ikke hentet ut brukernavnet for visning. ikke alle platformer som har sammenlignbart filsystem vil jeg tro. M$ Infernal Filesystem? OT: Du henger deg fremdeles opp i dette med "brutte sikkerHEST-løfter", ser jeg... Lenke til kommentar
Torbjørn Skrevet 28. november 2003 Del Skrevet 28. november 2003 haha! har aldri sett skrivefeilen før nå! takker for det .... etter å jobbet som drifter i sommer når MSBlast herjet som verst, så ser jeg ingen grunn til å fire på tonen i den signaturen nei Lenke til kommentar
Torbjørn Skrevet 28. november 2003 Del Skrevet 28. november 2003 nVIDIAsucks: det foreslåtte programmet vil ikke vise korrekte permissions for +s type rettigheter, tror det er 4'de oktett fra høyre eller noe sånt. tanken var å også implementere det, men jeg glemte det og det er kanskje ikke så farlig? hvis du har g+s eller u+s, så tror jeg det er 1xxx eller 2xxx (f.eks 1755 eller 2755 på en fil som ellers bare har 755), men programmet tar høyde for det idet den bare tar ut de 3 bakerste oktettene. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå