Artikel im Internet unter http://www.hidemail.de/blog/dateitestoperatoren-perl.shtml.
Mittwoch, 11.4.2007, 00:02:03 Uhr

Dateitestoperatoren - Eigenschaften von Verzeichnissen und Dateien feststellen


Die so genannten Dateitestoperatoren sind die schnellste und einfachste Methode in Perl, Eigenschaften von Dateien oder Verzeichnissen herauszufinden.
Manche Operatoren geben dabei nur true oder false zurück, andere wiederum Zahlen, etwa die Größe einer Datei.

Den Dateitestoperatoren wird ein - vorangestellt, danach folgt der Verzeichnis- bzw. Dateiname. Also zum Beispiel:

$size=-s 'dateiname.txt';
print $size;


Anstatt des Dateinamens können die Dateitestoperatoren übrigens auch mit Dateihandles arbeiten, also wäre auch ein

open (my $IN,"datei.txt");
$size=-s $IN;
close $IN;
print $size;


möglich.


Alle Operatoren, alphabetisch sortiert

-A
Dieser Operator ermittelt, wie lange seit Programmstart auf eine Datei zugegriffen wurde.
Der Rückgabewert ist die Zeit in Tagen als Gleitkommazahl.

printf("%.3f Tage Zugriffszeit",-A $Datei);


Für die vom Script verarbeitete Datei $Datei wird ausgegeben, wie lange darauf zugegriffen wurde.


-B
Dieser Operator ermittelt, ob die Datei eine Binärdatei ist.

open (FILE,"bild.gif");
binmode(FILE) if -B FILE;


Wenn die Datei des File-Handles FILE eine Binärdatei ist, wird binmode aufgerufen.


-b
Unix-spezifisch
Dieser Operator ermittelt, ob eine Gerätedatei blockorientiert ist.

exit(-1) unless -b "/cdrom";


Wenn "/cdrom" kein blockorientiertes Gerät ist, wird das Script beendet.


-C
Dieser Operator ermittelt die Inode-Veränderungszeit einer Datei seit Programmstart.
Rückgabewert ist die Zeit in Tagen als Gleitpunktzahl.

if(-C $Datei > 10) {
print "Warnung!"; }


Wenn die Inode-Zeit der Datei $Datei größer als 10 Tage ist, wird "Warnung!" ausgegeben.


-c
Unix-spezifisch
Dieser Operator ermittelt, ob eine Gerätedatei zeichenorientiert ist.

exit(-1) if -c "/cdrom";


Wenn "/cdrom" zeichenorientiert ist, wird das Script beendet.


-d
Dieser Operator ermittelt, ob es sich um ein Verzeichnis handelt.

chdir("test") if -d "test";


Wenn "test" ein Verzeichnis ist, wird in das Verzeichnis gewechselt.


-e
Dieser Operator ermittelt, ob ein Verzeichniseintrag bzw. eine Datei existiert.

print "text.txt existiert!" if -e "text.txt";


Wenn die Datei "text.txt" existiert, wird dies ausgegeben.


-f
Unix-spezifisch
Dieser Operator ermittelt, ob es sich um eine normale Datei (keine Gerätedatei, kein Verzeichnis usw.) handelt.

&tuwas if -f "text.txt";


Wenn die Datei "text.txt" eine normale Datei ist, wird eine Subroutine aufgerufen.


-g
Unix-spezifisch
Dieser Operator ermittelt, ob bei einer Datei das setgid-Bit (set-group-ID-Bit) gesetzt ist.

chmod 02771, "daten" unless -g "daten";


Wenn das Verzeichnis "daten" kein setgid-Bit besitzt, werden die entsprechenden Rechte gesetzt.


-k
Unix-spezifisch
Dieser Operator ermittelt, ob bei einer Datei das Sticky-Bit gesetzt ist (Bit z.B. für die Anweisung, Code eines Programms nach dessen Ausführung im Speicher zu behalten, weil es voraussichtlich öfter ausgeführt wird).

print "test.pl ist sticky" if -k "test.pl";


Wenn die Datei "text.pl" das Sticky-Bit gesetzt hat, wird dies ausgegeben.


-l
Unix-spezifisch
Dieser Operator ermittelt, ob es sich um einen symbolischen Link handelt.

print readlink("text.txt") if -l "text.txt";


Wenn die Datei "text.txt" ein symbolischer Link ist, wird dessen Wert ausgegeben.


-M
Dieser Operator ermittelt, wie lange eine Datei seit Programmstart nicht geändert wurde. Rückgabewert ist die Zeit in Tagen als Gleitpunktzahl.

printf("seit %.3f Tagen nicht modifiziert",-M $Datei);


Für die Datei $Datei wird ausgegeben, wie lange sie nicht mehr verändert wurde.


-o/-O
Unix-spezifisch
Dieser Operator ermittelt, ob die Datei der effektiven UID (-o) bzw. der realen UID (-O) gehört.

&tuwas if -o "text.txt";


Wenn die Datei "text.txt" der effektiven UID gehört, wird eine Subroutine aufgerufen.


-r/-R
Unix-spezifisch
Dieser Operator ermittelt, ob die effektive UID/GID (-r) bzw. die reale UID/GID (-R) Leserecht für die Datei besitzt.

open(FILE,"<text.txt") if -r "text.txt";


Wenn die effektive UID/GID Leserecht auf die Datei "text.txt" hat, wird sie zum Lesen geöffnet.


-p
Unix-spezifisch
Dieser Operator ermittelt, ob es sich um eine named pipe (FIFO) handelt.

print "pipe" if -p "myprog";


Wenn die Datei "myprog" eine named pipe ist, wird dies ausgegeben.

-S
Unix-spezifisch
Dieser Operator ermittelt, ob die Datei eine Socket-Datei ist (wird von Client-Server-Prozessen, die auf einem Rechner laufen, als Schnittstelle benutzt).

next if -S $_;


Wenn die aktuelle Datei innerhalb einer angenommenen Schleife zur Überprüfung von allen Verzeichniseinträgen ein Socket ist, startet der nächste Schleifendurchgang.


-s
Dieser Operator ermittelt die Dateigröße in Bytes.

print -s $Eintrag if not -d $Eintrag;


Wenn der Verzeichniseintrag $Eintrag kein Verzeichnis ist, wird die Dateigröße ausgegeben.


-t
Unix-spezifisch
Dieser Operator ermittelt, ob der Verzeichniseintrag ein tty, d.h. ein angeschlossenes Gerät (Terminal) ist (unter Unix werden Peripheriegeräte als Dateien behandelt).

print "STDIN ist tty" if -t "STDIN";


Wenn der Standardeingabekanal tty ist, wird dies ausgegeben.

-u
Unix-spezifisch
Dieser Operator ermittelt, ob bei einer Datei das setuid-Bit (Set-User-Id-Bit) gesetzt ist.

die "kein uid-Bit" if not -u "text.pl";


Wenn bei der Datei "text.pl" kein setuid-Bit gesetzt ist, wird das Script mit einer Fehlermeldung beendet.


-w/-W
Unix-spezifisch
Dieser Operator ermittelt, ob die effektive UID/GID (-w) bzw. die reale UID/GID (-W) Schreibrecht für die Datei besitzt.

open(FILE,">text.txt") if -W "text.txt";


Wenn die reale UID/GID für die Datei "text.txt" Schreibrechte besitzt, wird sie zum Schreiben geöffnet.


-x/-X
Unix-spezifisch
Dieser Operator ermittelt, ob die effektive UID/GID (-x) bzw. die reale UID/GID (-X) Ausführrecht für die Datei besitzt.

system("myprog") if -x "myprog";


Wenn die effektive UID/GID für die Datei "myprog" Rechte zum Ausführen der Datei besitzt, wird sie über einen system-Aufruf ausgeführt.


-z
Dieser Operator ermittelt, ob eine Datei leer ist, also 0 Bytes hat.

open(FILE,"<text.txt") if not -z "text.txt";


Wenn die Datei "text.txt" nicht leer ist, wird sie zum Lesen geöffnet.


Artikel im Internet unter http://www.hidemail.de/blog/dateitestoperatoren-perl.shtml.