Posso modificare la proprietà di tutti i file di un utente specifico?


9

C'è un modo per trovare ricorsivamente tutti i file di proprietà di un utente e cambiarli in un altro utente / gruppo in Gnu / Linux?

Presumo che ci debba essere un po 'di magia, ma le mie abilità di magia da riga di comando non sono all'altezza :)

Grazie!

Risposte:


14

Utilizzare il findcomando con l' -useropzione Qualcosa di simile a:

find / -user john

alla fine verranno visualizzati tutti i file di proprietà dell'utente "john".

Se vuoi cambiare la loro proprietà (eseguirò findsenza esecuzione per assicurarmi di avere l'elenco che desideri), quindi qualcosa del tipo:

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

lo farà.


1
Di solito uso l'UID ed eseguo chown harry:harryse devo assicurarmi che anche l'appartenenza al gruppo sia corretta. Ma ciò dipende fortemente dall'applicazione qui.
— ewwhite,

In realtà non funzionerebbe per me se non avessi usato l'UID. L'UID può essere trovato in / etc / passwd
— user222054

7

È tardi, ma oggi mi sono imbattuto in questa domanda perché la mia rsyncnon ha l' --usermapopzione.

My chown(v. Chown (GNU coreutils) 8.13) offre un recurse incorporato ( -R) e --fromun'opzione in modo che il tuo (e il mio) problema possano essere risolti anche usando

chown -R --from=john harry /


Più specificamente sto migrando un server da OpenSuse a debian e l'utente e il gruppo di apache2 differiscono tra le distribuzioni. In OpenSuse il suo utente wwwrun (id:30)e gruppo www (id:8), in debian www-data (id: 33)per entrambi. Dopo aver copiato i file usando

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

ero solito

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

sulla macchina target (debian).


Nota: rsync version 3.1.0 protocol version 31ha citato quanto sopra, --usermapquindi se avessi potuto fare tutti e tre i passaggi con un comando sul computer di origine:

rsync -az --usermap=30:33 --groupmap=8:33 /path/to/files root@debian:/path/to/

Preferisco questo, specialmente per l'opzione di cambiare gruppo. A find -execuno di linea per me è l'ultima risorsa, poco prima di fare le cose manualmente. (Inoltre, odio scrivere {} \;, ma questo è personale)
— Tomasz Gandor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.