ein Kapitel zurück                                           ein Kapitel weiter

In Perl gibt es einige Dateioperatoren mit denen sie Informationen verschiedenster Art zu einer Datei bekommen. Ich werde dabei nicht auf alle Eingehen.Zuerst folgende Dateitestoperatoren.......

  • -e existiert die Datei?
  • -z ist die Datei 0 Bytes gross (Zero)
  • -s Länge in Bytes



#!/usr/bin/perl -w

$file="file.txt";

#Falls file.txt nicht existiert (-e) wird sie erzeugt....
system("touch file.txt") if not -e $file;
#Überprüfung ob file.txt existiert.....
print "Datei file.txt exisitiert\n" if -e $file;

#Wenn Datei 0Bytes gross ist öffnen....
open(FH,">file.txt") if -z $file;
#Mit 100 Bytes füllen
print FH "x" x99 , "\n";
close FH;

print "Datei hat nicht die Länge Null\n" if not -z $file;

#Wir überprüfen die Grösse in Bytes von file.txt
print "Datei ist grösser als 100 Bytes\n" if -s $file > 100;
print "Datei ist 100 Bytes gross\n" if -s $file == 100;
#So gehts auch......
print -s $file , " Bytes\n";

#Wieder weg damit.....
unlink($file);


Das Programm erzählt die Anwendungen der Dateitestoperatoren glaube ich von selbst.

#!/usr/bin/perl -w

opendir(DH, ".") or die "opendir $!\n";
while(defined($name=readdir(DH))){
   print $name , "\n" if -s $name > 1024*10;
   }
closedir DH;


Mit diesem Beispiel geben wir zum Beispiel alle Dateien aus die Grösser als 10KB sind. Idealer läßt sich der -s Operator mit grep verwenden.....

#!/usr/bin/perl -w

@files = <*.txt>;

@number = grep { -s > 1024*10 }@files;

print "Textdateien grösser als 10KB : \n";
foreach(@number){
   print $_ , "\n";
   }


Hier werden alle Textdateien ausgegen die grösser als 10KB sind.

Um zu testen um was für eine "Dateiart" es sich handelt gibt es folgende Dateitestoperatoren....

  • -d Directory
  • -f normale Datei
  • -p Pipe
  • -l Symlink
  • -S Socket
  • -b Gerätedatei Blockweise
  • -c Gerätedatei Zeichenweise
  • -t Terminal (TTY)

Eingesetzt werden diese Dateien genauso wie schon oben gesehen. Auch hierzu ein Beispiel......

#!/usr/bin/perl -w

@files = <*>;

@directory = grep { -d }@files;
@file = grep { -f }@files;

print "Alle VERZEICHNISSE : \n";
print "@directory\n\n";
print "Alle regulären DATEIEN : \n";
print "@file\n\n";


Hier kommen alle Dateiverzeichnisse in @directory und alle regulären Dateien in @file.

stat : Wenn sie noch mehr Informationen über eine Datei oder offenes Filehandle benötigen können sie auch die Funktion stat verwenden. stat liefert bei Erfolg eine Liste mit 13 Elementen zurück mit folgendem Inhalt, in der selben Reihenfolge.....

  • dev      Gerätenummer des Dateisystems
  • ino      Inode-Nummer
  • mode     Zugriffsrecht und Dateityp
  • nlink    Zähler Harter Links
  • uid      User-ID
  • gid      Group-ID
  • rdev     Raw-Gerätenummer des Dateisytems
  • size     Logische Größe in Bytes
  • atime    Letzte Zugriffszeit
  • mtime    Letzte Veränderung
  • ctime    Letzte Inode-Veränderung
  • blksize  Ideale Blockgröße für Datei-I/O
  • blocks   Anzahl zugewisener Blöcke

Und auch hierzu das Anwendungsbeispiel zu stat......

#!/usr/bin/perl -w

$file="out.txt";
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
 $atime,$mtime,$ctime,$blksize,$blocks) = stat($file);

$at=scalar localtime($atime);
$mt=scalar localtime($mtime);
$ct=scalar localtime($ctime);

print "Datei : $file\n";
print "Device : ($dev, $rdev) Inode : $ino\n";
print "Mode : $mode\n";
print "Links : $nlink\n";
print "Eigentümer : ($uid, $gid)\n";
print "Grösse(logisch) : $size Bytes\n";
print "Grösse(physisch) : $blocks\n";
print "Blockgrösse : $blksize\n";
print "Letzter Zugriff : $at\n";
print "Letzte Änderung : $mt\n";
print "Inode-Änderung : $ct\n";


ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf