Kann ich den Besitz aller Dateien eines bestimmten Benutzers ändern?

9

Gibt es eine Möglichkeit, alle Dateien eines Benutzers rekursiv zu finden und in Gnu / Linux in einen anderen Benutzer / eine andere Gruppe zu ändern?

Ich gehe davon aus, dass es einen magischen Einzeiler geben muss, aber meine Fähigkeiten als Befehlszeilen-Zauberer sind dem nicht gewachsen :)

Vielen Dank!

John
quelle

Antworten:

14

Verwenden Sie den findBefehl mit der -userOption. Etwas wie:

find / -user john

wird schließlich alle Dateien auftauchen, die dem Benutzer "john" gehören.

Wenn Sie ihren Besitz ändern möchten (ich würde das findohne Ausführung ausführen, um sicherzustellen, dass Sie die gewünschte Liste haben), dann etwas wie:

find / -user john -exec chown harry {} \;

werde es tun.

cjc
quelle
1
Normalerweise verwende ich UID und führe es aus, chown harry:harrywenn ich sicherstellen muss, dass auch die Gruppenmitgliedschaft stimmt. Das hängt aber stark von der Anwendung hier ab.
ewwhite
Es würde für mich eigentlich nicht funktionieren, wenn ich nicht die UID verwenden würde. Die UID finden Sie in / etc / passwd
user222054
7

Das ist spät, aber heute bin ich über diese Frage gestolpert, weil ich rsynckeine --usermapOption habe.

Mein chown(v. Chown (GNU coreutils) 8.13) bietet eine integrierte Rekursion ( -R) und eine --fromOption, sodass Ihr (und mein) Problem auch mit gelöst werden könnte

chown -R --from=john harry /


Insbesondere migriere ich einen Server von OpenSuse nach Debian, und der Benutzer und die Gruppe von Apache2 unterscheiden sich zwischen den Distributionen. In OpenSuse sein Benutzer wwwrun (id:30)und seine Gruppe www (id:8), in Debian www-data (id: 33)für beide. Nachdem ich die Dateien mit kopiert habe

rsync -az /path/to/files me@debian:/path/to/

ich benutzte

chown -R --from=30 33 /path/to/files/
chown -R --from=:8 :33 /path/to/files/

auf dem Zielcomputer (Debian).


Hinweis: Wenn ich rsync version 3.1.0 protocol version 31das oben erwähnte --usermaphätte, hätte ich alle drei Schritte mit einem Befehl auf dem Quellcomputer ausführen können:

rsync -az --usermap=30:33 --groupmap=8:33 /path/to/files root@debian:/path/to/
Aet3miirah
quelle
Ich bevorzuge diese, besonders für die Option, die Gruppe zu wechseln. Ein find -execEinzeiler ist für mich das letzte Mittel, kurz bevor ich die Dinge manuell erledige. (Auch ich hasse es zu schreiben {} \;, aber das ist persönlich)
Tomasz Gandor