linux-l: chown|chmod -r --ohne_dirs

Dr.Bernd Freistedt bf at bcf.in-berlin.de
Di Mär 20 20:18:01 CET 2001


---Ulrich Wiederhold (linux-l at mlists.in-berlin.de) wrote on Tue, 20 Mar 2001 19:51:09 +0100

>> Man nehme mal wieder das komfortable `find` vielleicht mit der
>> option -type d in beglueckendem Zusammenspiel mit grep oder 
>> grep -v und haenge ein `| xargs chmod/chgrp/chown -R` dran
>> (natuerlich nicht alle drei gleichzeitig :-) )
> 
> Gute Idee! Allerdings komme ich mit dem Wort "beglueckendem" nicht ganz
> klar (trotz "man xargs").
> Habe erst mal versucht, alle Namen herauszufiltern, die "subdir2"
> enthalten (ist nur ein Verzeichnis). Das mit invers (-v) umzukehren,
> sollte dann nicht mehr das Problem sein...
>  find /dir -type d -maxdepth 1 `|xargs grep subdir2 *`

Quark

z.B.:

find /dir -type d -maxdepth 1 | grep 'subdir2'  |\
egrep -v 'alles|was|Du|nicht|haben|willst' |\
xargs chown -R oma:rentner

Bem.:
a) meinetwegen auch maxdepth. wenn es _genau_ das bringt was Du
   willst.
b) das erste grep koennte - wenn der Pfad-/Dateiname gut mit
   regexp bezukommen ist - auch egrep verwendet werden. Das ist
   komfortabler. 
c) man tut manchmal gut das Suchmuster in '' einzuschliessen
d) darf ich vom Verstaendnis des \ ausgehen? (Befehl geht
   naechste Zeile weiter)
e) mit dieser Kommandozeile werden nur die Directories
   umgesetzt; wenn auch die Datei gemeint sind, lass -type d
   weg. Wenn _nur_ Dateien und keine Dirs gemeint sein sollen:
   -type -f 
 
> Außerdem müßten eigentlich mehrere Directories herausgefiltert werden,
> also der Art:
> find /dir -type d -maxdepth 1 `|xargs grep -v subdir2|subdir4 *` `|xargs

Was soll der Asterix? - Bloedsinn. Da passiert nix.

man regexp (!)

> WoW! Sowas komplizierten (nicht lachen!) habe ich noch nie auf der
> Kommandozeile gemacht!

Das ist Butter-und-Brot-Werkzeug!
Zur Weiterbildung empfehle ich dann noch sed und awk (aber beide
richtig!) ... Dann kannst Du alle Deine Daten fein frickeln.

Gruessli
Bernd





Mehr Informationen über die Mailingliste linux-l