• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

chmod nur Dateien

Kurt M

Hacker
ich quäle mich nun schon eine zeitlang mit chmod herum, jetzt frage ich lieber mal:

Ich möchte in einem ganzen Verzeichnisbaum alle Text-Dateien schreibschützen.
Also schreibe ich
chmod -R 444 *

soweit sogut, nur hat er mir jetzt auch alle Verzeichnisse auf 444 gesetzt und ich komm nicht mehr hinein.
Ich könnte natürlich die Verzeichnisse und Dateien auf 555 setzen. Aber r-x sieht auf reinen Textfiles nicht so schön aus, sind ja keine ausführbaren Dateien.

Wie kann ich chmod schreiben, dass die Dateien r--r--r-- und die Verzeichnisse r-xr-xr-x bekommen ?

Danke
Kurt
 

regexer

Advanced Hacker
da der chmod offensichtlich keinen entsprechenden Parameter bietet, würde ich es so machen:

Code:
find -type f -exec chmod 444 {} \;  # chmod auf Dateien
find -type d -exec chmod 555 {} \;  # chmod auf Verzeichnisse
 
OP
Kurt M

Kurt M

Hacker
Danke! das funktioniert optimal.

Nur noch eine Frage damit ich die Zeile auch verstehe:
was bedeutet der Parameter {} \; hinter dem chmod.

Bei chmod steht das nicht, aber wahrscheinlich muss ich irgendwo nachlesen wo es allgemein um Kommandozeilen geht ?
 

TeXpert

Guru
man find :)

-exec command ;
Execute command; true if 0 status is returned. All following arguments to find are taken to
be arguments to the command until an argument consisting of `;' is encountered. The string
`{}' is replaced by the current file name being processed everywhere it occurs in the argu-
ments to the command, not just in arguments where it is alone, as in some versions of find.
Both of these constructions might need to be escaped (with a `\') or quoted to protect them
from expansion by the shell. The command is executed in the starting directory.
 

regexer

Advanced Hacker
Kurt M schrieb:
was bedeutet der Parameter {} \; hinter dem chmod.
Wie TeXpert schon angemerkt hat, gehört dieser Parameter zum Befehl "find". Der find ist eines der Werkzeuge für Dateioperationen schlechthin. Damit lassen sich auch Dinge erledigen, wie z.B. "verschiebe alle Dateien, die älter als 30 Tage sind in ein archiv-Verzeichnis". Bei Interesse könntest du folgenden Link verwenden:

http://www.linuxfibel.de/file+dir.htm#find
 
Oben