![ein Kapitel weiter](../weiter.gif)
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 weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|