Chmod-Dateien, um der Gruppe rekursiv dieselben Berechtigungen wie dem Benutzer zu erteilen

15

Gibt es einen Unix-Befehl, um der Gruppe die gleichen Berechtigungen zu erteilen, die der Benutzer derzeit für einen Verzeichnisbaum Datei für Datei rekursiv hat? Dh wenn eine Datei benutzerbeschreibbar ist, sollte sie gruppenbeschreibbar werden, andernfalls sollte sie nicht gruppenbeschreibbar sein und so weiter.


quelle

Antworten:

24

Ein großes Lob an Jamessan, dass er uns g = u gezeigt hat. Auf meinem System scheint dies zu funktionieren:

chmod -R g=u dir
Joey Adams
quelle
1
Das ändert auch die Berechtigungen von Verzeichnissen. Die ursprüngliche Frage spezifizierte Dateien.
Jamessan
@ Jamessan, welche Verzeichnisse sind.
Mike Graham
@Mike, nur weil * nix es Ihnen ermöglicht, so ziemlich alles als Datei zu behandeln, heißt das nicht, dass Verzeichnisse tatsächlich Dateien sind. Selbst wenn man zugeben würde, dass sie identisch sind, gibt es einen deutlichen funktionalen Unterschied zwischen dem Ändern der Berechtigungen aller Dateien in einem Verzeichnisbaum und dem Ändern der Berechtigungen aller Dateien und Verzeichnisse in einem Verzeichnisbaum.
Jamessan
Es gibt wieder eine einfache Lösung für mein Problem. Warum bin ich nicht überrascht?
Rzetterberg
9
find dir -type f -exec chmod g=u '{}' \+
Jamessan
quelle
0

Ich kann mir keine einfache Möglichkeit vorstellen, dies mit vorhandenen Befehlen zu tun. Vielleicht würde ein Skript wie dieses helfen:

#!/bin/bash

DIR="$1"

find "$DIR" -ls | while read a b perm c d e f g h i file; do
   uperm=${perm:1:3}
   uperm=$(echo "$uperm" | tr -d '-')
   chmod g=$uperm "$file"
done

Beachten Sie auch, dass einige Berechtigungen für Benutzer möglicherweise nicht für Gruppen gelten und umgekehrt.

ℝaphink
quelle
0

Ich weiß nicht, ob ein solcher Befehl vorhanden ist, aber wenn Sie find verwenden und ihn einige Male aufrufen, können Sie beispielsweise das erreichen,
was Sie versuchen

Beispielsweise:
% find . -type f -perm -u+w -and ! -perm -g+w -exec chmod g+w {} \;

Der obige Befehl durchläuft das aktuelle Verzeichnis ".", Findet alle Dateien, die Schreibrechte für
den Benutzer, aber keine Schreibrechte für die Gruppe haben, und ändert dort die Berechtigung, gruppenschreibbar zu sein.

In ähnlicher Weise verwenden Sie die obige Variante, um die Dateiberechtigungen für den Lese- und Ausführungsmodus für die Gruppe zu ändern .

Sateesh
quelle