
die Dateien eines Ordners
/mehrere Ordner in einem Verzeichnis anzeigen - glob
nach Dateien mit Regular Expressions in einer Verzeichnisstruktur
suchen - glob und grep
nur die Verzeichnisse anzeigen - glob
die Verzeichnisse und die Dateien anzeigen - readdir
Verzeichnisse anlegen, umbenennen, löschen
- mkdir, rename, rmdir
einzelne Dateien löschen - unlink
die
Dateien eines Ordners /mehrere Ordner in einem Verzeichnis
anzeigen - glob |
|
Von großem Interesse ist es, welche Dateien
und Unterverzeichnisse ein Verzeichnis enthält, siehe
Suchmaschine. Darüber hinaus sollten
Verzeichnisse eingerichtet, gelöscht oder umbenannt werden
können. Meistens tritt dies bei Anwendungen auf, die
der User komplett installiert, etwa einem Shop.
Welche Dateien sind in einem Ordner?
Hier wird die Funktion glob verwendet:
chdir("c:/sambar/docs/");
@banane=glob("*.*");
print @banane;
Mit chdir wird in ein bestimmtes
Verzeichnis gewechselt. Hier werden alle Dateien "rausgfischt".
Die Sterne sind wildcards.
Glob zeigt dann, welche Dateien
sich im Ordner docs befinden.
Innerhalb der glob Funktion kann das Verzeichnis auch direckt
angegeben werden, man muss dann nicht mit chdir in das entsprechende
Verzeichnis wechslen. Das sieht dann so aus:
@banane=glob("c:/sambar/docs/*.*");
print @banane;
Als Ergebnis erhalten wir:
C:\testordner>perl testo.pl
c:/sambar/docs/favicon.icoc:/sambar/docs/feedback.htmc:/sambar/docs/index.htmc:/
sambar/docs/robots.txtc:/sambar/docs/search.dllc:/sambar/docs/thanks.stm
C:\testordner>
Auch folgende Schreibweise ist möglich:
@banane=glob("c:/sambar/*/*.htm");
print @banane;
Als Ergebnis erhalten wir:
C:\testordner>perl testo.pl c:/sambar/syshelp/features.htmc:/sambar/syshelp/fetcher.htmc:/sambar/sy
shelp/filter.htmc:/sambar/syshelp/Financec.htmc:/sambar/syshelp/ftp.htmc:/sambar
/syshelp/futures.htmc:/sambar/syshelp/history.htmc:/sambar/syshelp/howto.htmc:/s
ambar/syshelp/htaccess.htmc:/sambar/syshelp/index.htmc:/sambar/syshelp/install.h
tmc:/sambar/syshelp/iodbc.htmc:/sambar/syshelp/isapi.htmc:/sambar/syshelp/isapia
pp.htmc:/sambar/syshelp/isapiext.htmc:/sambar/syshelp/javaeng.htmc:/sambar/syshe
lp/lansetup.htmc:/sambar/syshelp/License.htmc:/sambar/syshelp/Log.htmc:/sambar/s
yshelp/logfmt.htmc:/sambar/syshelp/mail.htmc:/sambar/syshelp/mailhelp.htmc:/samb
ar/syshelp/mailit.htmc:/sambar/syshelp/mailpop3.htmc:/sambar/syshelp/mailsmtp.ht
mc:/sambar/syshelp/mime.htmc:/sambar/syshelp/modules.htmc:/sambar/syshelp/ntsec.
htmc:/sambar/syshelp/Observe.htmc:/sambar/syshelp/Param.htmc:/sambar/syshelp/par
amset.htmc:/sambar/syshelp/pro.htmc:/sambar/syshelp/Props_ld.htmc:/sambar/syshel
p/Proxy.htmc:/sambar/syshelp/proxyfaq.htmc:/sambar/syshelp/put.htmc:/sambar/sysh
elp/rewrite.htmc:/sambar/syshelp/roadmap.htmc:/sambar/syshelp/sched.htmc:/sambar
/syshelp/scl_init.htmc:/sambar/syshelp/script.htmc:/sambar/syshelp/search.htmc:/
sambar/syshelp/search2.htmc:/sambar/syshelp/sec.htmc:/sambar/syshelp/security.ht
mc:/sambar/syshelp/sendmail.htmc:/sambar/syshelp/server.htmc:/sambar/syshelp/ser
verx.htmc:/sambar/syshelp/Servlets.htmc:/sambar/syshelp/shutdown.htmc:/sambar/sy
shelp/side.htmc:/sambar/syshelp/Snd_file.htmc:/sambar/syshelp/snd_head.htmc:/sam
bar/syshelp/socks.htmc:/sambar/syshelp/ssi.htmc:/sambar/syshelp/ssl.htmc:/sambar
/syshelp/ssltech.htmc:/sambar/syshelp/statslog.htmc:/sambar/syshelp/Support.htmc
:/sambar/syshelp/telnet.htmc:/sambar/syshelp/vhosts.htmc:/sambar/syshelp/watcher
.htmc:/sambar/syshelp/webmail.htmc:/sambar/syshelp/win95.htmc:/sambar/syshelp/wi
ncgi.htm
C:\testordner>
Jetzt werden alle Dateien mit der Endung htm
"rausgefischt", die unterhalb von sambar liegen. Also z.B.
c:/sambar/docs/berlin/sehenswert.htm, c:/sambar/docs/dresden/museum.htm
etc.
Leistungsfähige Regular Expression hat der glob Befehl
nicht.
Möglich ist darüber hinaus noch:
@banane=glob("c:/sambar/*/?????.htm");
print @banane;
Jetzt werden
alle Dateien in allen Ordnern direkt unter c:/sambar/ "rausgefischt",
die sich aus 6 Zeichen einem Punkt und htm.zusammensetzen.
nach
Dateien mit Regular Expressions in einer Verzeichnisstruktur
suchen - glob und grep |
|
Werden Regular Expression gebraucht, kann glob
mit grep verbunden werden.
Das sieht dann in etwa so aus:
@banane=grep(/html|htm/, glob("c:/sambar/*/*.*"));
print @banane;
oder ausführlicher:
@kirsche=glob("c:/sambar/*/*.*");
@banane=grep(/html|htm/, @kirsche);
print @banane;
Es werden alle
Dateien angezeigt, die in Verzeichnissen direkt unterhalb
des Verzeichnisses Sambar liegen und auf html oder htm enden.
nur
die Verzeichnisse anzeigen |
|
Sollen nur die Verzeichnisse angezeigt werden,
verfährt man wie im folgenden Beispiel:
@kirsche=glob("c:/sambar/*/");
foreach $himbeere(@kirsche)
{
print "$himbeere \n";
}
Als Ergebnis
erhalten: C:\testordner>perl
testo.pl
c:/sambar/bin/
c:/sambar/cgi-bin/
c:/sambar/cgi-win/
c:/sambar/config/
c:/sambar/docs/
c:/sambar/include/
c:/sambar/lib/
c:/sambar/log/
c:/sambar/messages/
c:/sambar/perl/
c:/sambar/profiles/
c:/sambar/samples/
c:/sambar/search/
c:/sambar/servlets/
c:/sambar/sysadmin/
c:/sambar/syscss/
c:/sambar/syshelp/
c:/sambar/sysimage/
c:/sambar/tmp/ C:\testordner>
Das heisst, wir erhalten alle Ordner unterhalb
von c:\sambar
die
Verzeichnisse und die Dateien anzeigen |
|
Eine Alternative hierzu ist der Befehl readdir(
read directory).
Das sieht dann so aus:
opendir(BANANE,"c:/sambar/docs/");
@kirsche=readdir(BANANE);
closedir(BANANE);
print @kirsche;
Readdir hat
gegenüber glob einen Vorteil. Man erhält sowohl
die Dateien als auch die Verzeichnisse.
Die Syntax readdir geht auf den Verzeichnishandle,
der erst mal mit opendir produziert werden muss. Der
Verzeichnishandle sollte anschließend wieder geschlossen
werden.
Nachdem man die Dateien hat, kann mit grep wieder eine Feinselektion
vorgenommen werden:
opendir(BANANE,"c:/sambar/docs/");
@kirsche=grep(/html|htm/,readdir(BANANE));
closedir(BANANE);
print @kirsche;
Verzeichnisse
anlegen, umbenennen, löschen - mkdir, rename, rmdir |
|
Verzeichnisse sollten angelegt, gelöscht
und umbenannt werden können. Wie das geht, zeigt folgendes
Skript:
mkdir("c:/testofix/testle");
sleep(5);
rename("c:/testofix/testle","c:/testofix/teschtle");
sleep(5);
rmdir("c:/testofix/teschtle");
Das Skript
sollte aus der Eingabeaufforderung heraus ausgelöst werden.
Man geht dann in den Ordner testofix, den man schon eingerichtet
hat. Nach 5 Sekunden wird das Verzeichnis testle eingerichtet
mit mkdir, nach weiteren 5 Sekunden wird es umbenannt
mit rename und nach weiteren 5 Sekunden entfernt
mit rmdir.
Die Sache ist übrigens noch steigerungsfähiger:
for ($i=0;$i<3;$i++)
{
sleep(5);
mkdir("c:/testofix/testle");
sleep(5);
rename("c:/testofix/testle","c:/testofix/teschtle");
sleep(5);
rmdir("c:/testofix/teschtle");
}
Nachdem
das Skript in der Eingabeaufforderung (bzw.Dos Box) ausgelöst
worden ist, muss man sich schon ein bisschen, beeilen, damit
man mit dem Windows Explorer in das Verzeichnis testofix kommt.
Die Funktion rename erwartet zwei Parameter, die Datei, die
umbenannt werden soll, und den Namen der Datei. Werden unterschiedliche
Pfade angegeben, wird sie umkopiert.
einzelne
Dateien löschen - unlink |
|
Es liegt nahe, dass Dateien auch gelöscht
werden können.
Das passiert mit unlink:
open(KIRSCHE,">c:/testofix/zewa_wisch_und_wech.txt");
print KIRSCHE "Lieb ist vergänglich";
close(KIRSCHE);
sleep(5);
unlink("c:/testofix/zewa_wisch_und_wech.txt");
Zuerst
wird eine Datei zewa_wisch_und_wech.txt eingerichtet. Dann
macht das Skript ein Nickerchen für 5 Sekunden.
Anschließend wird die Datei zewa_wisch_und_wech.txt.
gelöscht
|
 |