Hier ist ein Skript, das Sie aufrufen können, indem Sie den Modus als erstes Argument und einen oder mehrere Verzeichnisnamen als nachfolgende Argumente übergeben. Wenn Sie unter Linux keinen Verzeichnisnamen übergeben, ist dies so, als hätten Sie .
(das aktuelle Verzeichnis) übergeben. Benennen Sie dieses Skript rchmodf
, machen Sie es ausführbar ( chmod a+rx /path/to/rchmodf
) und platzieren Sie es irgendwo auf Ihrem $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Erläuterungen: mode=$1; shift
Setzt die Variable mode
auf das erste Argument des Skripts und entfernt dieses erste Argument aus der Liste. "$@"
Erweitert die Liste aller Argumente.
Wenn Sie möchten, können Sie ein Skript erstellen, das sowohl einen Verzeichnismodus als auch einen Dateimodus akzeptiert.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Beachten Sie, dass 744 kein nützlicher Dateimodus ist. 644 (vom Benutzer beschreibbar und weltweit lesbar) und 755 (auch von der Welt ausführbar) sind weitaus häufiger. Außerdem ist es selten sinnvoll, jede Datei in einem Baum so zu ändern, dass sie ausführbar oder nicht ausführbar ist. Sie möchten dieses Skript wahrscheinlich mit Argumenten wie +rX
(Großbuchstaben X
, um das ausführbare Bit nur für Verzeichnisse und für Dateien zu setzen, die bereits ausführbar sind) aufrufen . In der Tat ist der X
symbolische Modus wahrscheinlich das, wonach Sie mit diesen Skripten gesucht haben : chmod -R +rX .
.
Mit bash oder zsh gibt es eine andere Möglichkeit, rekursiv zu handeln, jedoch nur für Verzeichnisse. Für Bash benötigen Sie Version 4 und müssen shopt -s globstar
zuerst ausgeführt werden.
chmod a+rx **/*/
In zsh können Sie auf Dateien nur mit dem Suffix (.)
: chmod a+r **/*(.)
.
Ich werde die Nautilus-Frage weitergeben.