Alla ricerca di file NON di proprietà di qualcuno


182

Sto cercando di consultare ricorsivamente le directory per trovare file NON di proprietà di un determinato utente e non sono sicuro di come scriverlo.

Risposte:


274

L'utilità find (1) ha delle primarie che possono essere negate ("invertite") usando "!" operatore. Al prompt, tuttavia, è necessario sfuggire alla negazione con una barra rovesciata in quanto è un metacarattere shell. Risultato:

find . \! -user foo -print

6
la fuga !sembra essere facoltativa
doub1ejack il

1
eseguendo il piping dell'output su xargs -I{} -P3 -- ${cmdhere} {}$ {cmdhere} può funzionare su ogni file in parallelo. cmdhere :: = standard unix utils; standard unix utils :: = chmod, chown, stat, ls, ...
Dwight Spencer

1
@sorin intendi il find . ...o il piping al xargsprimo o al secondo modo?
Kev,

3
find ha il flag -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens,

1
come aggiungere le informazioni sul proprietario come output?
Duc Tran,

38

Alla ricerca di file NON di proprietà di qualcuno

Altri hanno risposto alla domanda "NON di proprietà di un determinato utente" nel corpo. Eccone uno che risponde alla domanda titolare ma non è stato fornito:

$ find / -nouser

Puoi usarlo così:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

E uno correlato:

$ find / -nogroup

3
Ti darò un voto per il tecnicismo, ma la gente generalmente direbbe "non di proprietà di nessuno" se intendessero quello che stavi interpretando.
Shibumi,

2
@Shibumi - Sì, sembra giusto per quei capelli che si dividono. Il problema che ho dovuto affrontare era che dovevo trovare file letteralmente non di proprietà di nessun utente. È emerso dopo un aggiornamento e una migrazione di un web server. Alcuni ID utente / gruppo sono cambiati, quindi avevo bisogno di scrivere un chown.
dal

12

-usertrova per utente o ID utente e !inverte il predicato. Quindi ! -user ....


2
Sottovalutato perché non aggiunge nulla alla risposta accettata e maschera altre possibili risposte (come il modello zsh glob di seguito).
Ulysse BN,

9

Puoi usare questo:

find <dir> ! -user <username> 

2
Sottovalutato perché non aggiunge nulla alla risposta accettata e maschera altre possibili risposte (come il modello zsh glob di seguito).
Ulysse BN,

5

Usando z-shell (zsh) puoi usare

ls -laR *(^U)

o

ls -la **/*(^U)

per cercare tutti i file ricorsivamente non di tua proprietà.


È vero che il comando sopra non elencherà i file punto, anche con il -aflag a causa dell'espansione jolly. Per catturare dot file utilizzano l'zsh dotglobopzione: setopt dotglob. In una riga: (setopt dotglob; ls **/*(^U) ). Le parentesi devono essere eseguite in una subshell in modo da non dover eseguire al setopt nodotglobtermine.
Zorawar,
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.