korea1 Geschrieben 9. Februar 2004 Teilen Geschrieben 9. Februar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 9. Februar 2004 Teilen Geschrieben 9. Februar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
korea1 Geschrieben 9. Februar 2004 Autor Teilen Geschrieben 9. Februar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Februar 2004 Teilen Geschrieben 9. Februar 2004 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 9. Februar 2004 Teilen Geschrieben 9. Februar 2004 Hallo nochmal, hast du es schon mit absoluter Pfadangabe versucht ? Also $Eintrag=e:/abc/XY anstatt $Eintrag=XY, denn dann müsste auch überall funktionieren. Zur Frage mit den Unterordern: Rekursion ist dein Freund. Tipp: Schau dir mal das Modul File::Find an. cya alligator Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
korea1 Geschrieben 10. Februar 2004 Autor Teilen Geschrieben 10. Februar 2004 @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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 10. Februar 2004 Teilen Geschrieben 10. Februar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.