Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
#!/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 av Torbjørn
Lenke til kommentar
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...