Schrift
[thread]9816[/thread]

Skript für Ordnerrechte



<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-06-24 14:27
#95871 #95871
Hallo,
Ich benötige ein Simples skript, welches alle ordner auslesen kann und dann den Ordnernamen als Besitzer des Ordners schreibt.
Also von Hand mache ich es momentan so:

ls ###dann sehe ich alle ordner picke mir einen raus

chown ordnername:www ordnername -R


da mir das bei 300 Ordnern echt zu viel ist und bestimmt nicht mehr als 10 Zeilen Programm sind, würde ich gerne ein Skript dafür haben.

Kann mir jemand die Lösung schreiben??
Ich weiß das ich zu blöd dafür bin, sorry!
Ronnie
 2007-06-24 15:03
#95872 #95872
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ungetestet:
Code: (dl )
perl -e 'print "chown $_:www $_ -R\n" for grep { -d } <*>;'

Ausgabe überprüfen, bei Gefallen in ein Shellscript umleiten und ausführen.
renee
 2007-06-24 15:09
#95873 #95873
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
so ungefaehr:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use File::Spec;

my $dir = '/pfad/der/zu/durchsuchen/ist';
opendir DIR, $dir or die $!;
while( my $entry = readdir DIR ){
    my $path = File::Spec->catfile( $dir, $entry );
    next unless -d $path;

    # chown-BEfehl
}
closedir DIR;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
MisterL
 2007-06-24 15:10
#95874 #95874
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Also unter *nix kann man mit readdir operieren: http://de.wikipedia.org/wiki/Dateisystem
Danach geht es mit foreach, dem Besitzer des Verzeichnisses und dem Befehl zum Ändern der Ordnernamen weiter (so habe ich die Frage jedenfalls verstanden)

Gruss MisterL

edit: zu langsam getippt und die anderen Lösungen sehen besser aus :)\n\n

<!--EDIT|MisterL|1182683486-->
“Perl is the only language that looks the same before and after RSA encryption.”
benny
 2007-06-24 15:17
#95875 #95875
User since
2007-06-24
2 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hey super!
Nun noch eine kleine Anforderung!
Ich hab noch eine Ordnerebene darüber. In diese muss ich erst rein und dann dies ausführen!
also /home => ls => cd ordnerstamm
dein befehl!
cd ..
ls => cd ordnerstamm2
dein befehl
....


:)

Könntes du mir vielleicht sogar ein Buch empfehlen, wie ich das lerne.
Hätte nicht gedacht dass ich das auf 1 Zeile komprimieren kann :D

Gruß
Benny

PS: Danke
MisterL
 2007-06-24 16:04
#95876 #95876
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Hierzu kann man den Verzeichnisbaum rekursiv aufsuchen.
Im Perl Kochbuch, Seite385, Tip 9.8 findet sich hierzu u.a. folgendes:
Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl 
# rmtree2 - lösche vollständige Verzeichnisbäume wie rm -r
use File::Path;
die "Verwendung: $O verzeichnis ..\n" unless @ARGV;
foreach $dir (@ARGV) {
rmtree($dir);
}

Statt rmtree($dir) also die passenden Befehle ;-)
“Perl is the only language that looks the same before and after RSA encryption.”
Ronnie
 2007-06-24 16:16
#95877 #95877
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Jetzt wird es für einen Einzeiler langsam eng:
Code: (dl )
perl -MFile::Basename -e 'print "chown ". basename($_) .":www $_ -R\n" for map {grep {-d} <$_/*>} grep {-d} <*>;'

da sollte man eine mehrzeilige Variante in Erwägung ziehen, die auch Feinheiten wie Leerzeichen im Verzeichnisnamen berücksichtigt etc.

Perl lernen kann man als Anfänger schön mit dem Buch "Einführung in Perl", erschienen bei O'Reilly.

EDIT: Ein paar Leerzeichen entfernt, sodass es noch in eine Zeile (auf meinem Bildschirm) passt.\n\n

<!--EDIT|Ronnie|1182689224-->
coax
 2007-06-24 16:19
#95878 #95878
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=benny,24.06.2007, 13:17]Nun noch eine kleine Anforderung!
Ich hab noch eine Ordnerebene darüber. In diese muss ich erst rein und dann dies ausführen!
also /home => ls => cd ordnerstamm
dein befehl!
cd ..
ls => cd ordnerstamm2
dein befehl
....
[/quote]
Mit der Perl-Funktion chdir wechselst du das Verzeichnis
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

 use strict;
 use warnings;

 use File::Spec;

 my $parent_dir = File::Spec->updir();

 chdir($parent_dir) or die "Error: Can't change directory to '$parent_dir'!\n";


Quote
Könntes du mir vielleicht sogar ein Buch empfehlen, wie ich das lerne.
Hätte nicht gedacht dass ich das auf 1 Zeile komprimieren kann :D

Im Wiki gibt es eine Seite Wiki:BuchEmpfehlungen, vielleicht wirst du ja dort fuendig.
,,Das perlt aber heute wieder...'' -- Dittsche
benny
 2007-06-24 16:48
#95879 #95879
User since
2007-06-24
2 Artikel
BenutzerIn
[Homepage] [default_avatar]
Super, danke fürs erste! Super forum
<< >> 9 Einträge, 1 Seite



View all threads created 2007-06-24 14:27.