Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

chmod nur Dateien

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
Kurt M
Hacker
Hacker
Beiträge: 408
Registriert: 24. Sep 2004, 12:39
Wohnort: Bayrischer Wald
Kontaktdaten:

chmod nur Dateien

Beitrag von Kurt M »

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
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

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

Code: Alles auswählen

find -type f -exec chmod 444 {} \;  # chmod auf Dateien
find -type d -exec chmod 555 {} \;  # chmod auf Verzeichnisse
Benutzeravatar
Kurt M
Hacker
Hacker
Beiträge: 408
Registriert: 24. Sep 2004, 12:39
Wohnort: Bayrischer Wald
Kontaktdaten:

Beitrag von Kurt M »

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 ?
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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.

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Kurt M hat geschrieben: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
Benutzeravatar
Kurt M
Hacker
Hacker
Beiträge: 408
Registriert: 24. Sep 2004, 12:39
Wohnort: Bayrischer Wald
Kontaktdaten:

Beitrag von Kurt M »

Danke für die Hilfe, klappt so alles bestens !
Antworten