Zum Inhalt springen

perl verzeichnis auslesen (berechtigungen)


Empfohlene Beiträge

hi @ all,

ich habe folgendes script:


#!/usr/bin/perl

$Verzeichnis = 'e:/programmierung';

opendir(DIR, $Verzeichnis) || die "Kann Verzeichnis nicht oeffnen $Verzeichnis:";
@VerzeichnisInhalt = readdir(DIR);
closedir(DIR);

foreach $Eintrag (@VerzeichnisInhalt){
print "$Eintrag\n";
system("XCACLS $Eintrag");
}
[/PHP]

dieser schnipsel, soll mir für jedes verzeichnis die berechtigungen ausgeben.

also z.b.:

.

E:\programmierung\Perl Jeder:(OI)(CI)F

..

E:\programmierung Jeder:(OI)(CI)F

das klappt ja auch ganz schön, aber für jeden unterordner bringt er mir folgende fehlermeldung:

C++

ERROR: Das System kann die angegebene Datei nicht finden.

datenbanken

ERROR: Das System kann die angegebene Datei nicht finden.

java

ERROR: Das System kann die angegebene Datei nicht finden.

Perl

ERROR: Das System kann die angegebene Datei nicht finden.

php

ERROR: Das System kann die angegebene Datei nicht finden.

tools

ERROR: Das System kann die angegebene Datei nicht finden.

VB

ERROR: Das System kann die angegebene Datei nicht finden.

xcacls

ERROR: Das System kann die angegebene Datei nicht finden.

xcacls.exe

ERROR: Das System kann die angegebene Datei nicht finden.

was mach ich falsch??

die struktur meiner testumgebung sieht so aus:

e:

programmierung

C++

datenbanken

java

Perl

mein_perl_script

php

tools

VB

xcacls

danke korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

1. Die shebang-Zeile #!/usr/bin/perl scheint mir unter Windows nicht wirklich sinnvoll zu sein

2. Da leider die Smilies aktiviert sind, kann ich dein Beispiel nicht ganz entziffern

3. Was für Berechtigungen meinst du unter Windows (Bin da leider nicht so fit)

4. Was macht XCACLS ?

5. Als Errormeldung steht da ja, dass er die Datei nicht finden kann.

Hast du mal versucht das Verzeichnis absolut anstatt relativ zu übergeben ?

cya

alligator

Link zu diesem Kommentar
Auf anderen Seiten teilen

an stelle der smilies setzt einfach einen doppelpunkt und ein ( .

xcacls muss in c:\winnt vorhanden sein, das ist ein tool, das dir auf kommandozeilen ebene erlaubt, die datei oder verzeichnisrechte zu ändern.

xcacls liegt bei mir auch c:\winnt. und was ich nicht begreif ist, dass es bei den ersten beiden verzeichnissen funktioniert und dann nicht mehr.

verzeichnisrechte meine ich: welche gruppe/user darf was. also lesen schreiben....

mein script liegt unter e:/programmierung/perl

dort gibt er mir die berechtigung auch an und für e:/programmierung gibt er mir die berechtigungen auch an.

das heisst, er gibt mir erst die rechte des ordners an, in dem das ausführende script liegt und dann den root ordner, den ich in $Verzeichnis angegeben hab. die anderen ordner funktionieren nicht.

hier nochmal meine richtige ordnerstruktur, die hats auch net so richtig angezeigt.

e

|_

programmierung

|_php

|_java

|_c++

|_perl

|_

|_mein script

wenn ich das script unter e:/programmierung lege, dann bringt er mir die berechtigung aller ordner, die sich auf dieser ebene befinden. hm... eigentlich müsste es doch auch so gehen, dass das script nicht dort liegen muss, oder?

und wie bieg ich das hin, dass er mir auch in die unterordner der jeweiligen ordner geht, falls vorhanden??

korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

also in php gibt readir immer nur die filenames zurück.

du müsstest dann noch z.b. is_dir() auf den filename anwenden um überhaupt zu wissen ob du es mit einer datei bzw einem ordner zu tuen hast.

falls es ei ordner ist dann mach wieder readdir auf den ordner und lese darin weiter aus.

diese angaben sind ohne gewähr, da ich keine ahnun habe wie perl `s readdir funktioniert.

Weiterhin ist das alles nur zu beachten wenn dieses XCACLS nur auf dateien anwendbar ist!

Link zu diesem Kommentar
Auf anderen Seiten teilen

@alligator

das ist doch keine relative pfadangabe, soweit ich weiss, oder??

$Verzeichnis_=_'e:/programmierung';

mit modulen hatte ich noch nicht so viel am hut.

das modul muss ich mir erst downloaden, oder?

und dann einbinden.

perl bietet doch zum downloaden von modulen ne konsole an, oder? wie hieß die nochmal??

danke korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sers,

$Verzeichnis ja, aber $Eintrag nicht ...

Aber das müsstest du ja selber sehen, da du ja print "$Eintrag\n"; machst.

Alles über Perl-Module: http://www.cpan.org/

File::Find ist jedoch ein Standard-Modul (ab 5.6.0 zumindest) und musst es dir nicht runterladen.

Beschr hier: http://search.cpan.org/~nwclark/perl-5.8.3/lib/File/Find.pm

cya

alligator

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...