Recherche de fichiers qui n'appartiennent à personne

182

Je cherche à parcourir de manière récursive les répertoires pour trouver des fichiers qui ne sont PAS détenus par un utilisateur particulier et je ne sais pas comment écrire cela.

mike628
la source

Réponses:

274

L'utilitaire find (1) a des primaires qui peuvent être annulées ("inversées") en utilisant le "!" opérateur. A l'invite, il faut cependant échapper à la négation avec une barre oblique inverse car il s'agit d'un métacaractère shell. Résultat:

find . \! -user foo -print
Mel
la source
6
échapper au !semble être facultatif
doub1ejack
1
canaliser la sortie vers xargs -I{} -P3 -- ${cmdhere} {}peut faire fonctionner $ {cmdhere} sur chaque fichier en parallèle. cmdhere :: = utils standard unix; utils standard unix :: = chmod, chown, stat, ls, ...
Dwight Spencer
1
@sorin voulez-vous dire le find . ...ou la tuyauterie de xargsla première ou de la deuxième façon?
Kev
3
find a le drapeau -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens
1
comment ajouter des informations sur le propriétaire en sortie?
Duc Tran
38

Recherche de fichiers qui n'appartiennent à personne

D'autres ont répondu à la question "N'appartenant pas à un utilisateur particulier" dans le corps. En voici une qui répond à la question titulaire mais qui n'a pas été fournie:

$ find / -nouser

Vous pouvez l'utiliser comme ceci:

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

Et un lié:

$ find / -nogroup
jww
la source
3
Je vais vous donner un vote pour les détails techniques, mais les gens diraient généralement «n'appartenant à personne» s'ils voulaient dire ce que vous interprétiez.
Shibumi
2
@Shibumi - Ouais, ça sonne bien pour ces cheveux fendus. Le problème auquel j'ai été confronté était que je devais trouver des fichiers n'appartenant à aucun utilisateur. Il a fait surface après une actualisation et une migration du serveur Web. Certains identifiants d'utilisateur / de groupe ont changé, j'ai donc dû écrire un chown.
jww
12

-userrecherche par utilisateur ou ID utilisateur et !inverse le prédicat. Ainsi, ! -user ....

Ignacio Vazquez-Abrams
la source
2
Downvoté car il n'ajoute rien à la réponse acceptée et masque d'autres réponses possibles (comme le modèle zsh glob ci-dessous).
Ulysse BN
9

Vous pouvez utiliser ceci:

find <dir> ! -user <username> 
Crayon Violent
la source
2
Downvoté car il n'ajoute rien à la réponse acceptée et masque d'autres réponses possibles (comme le modèle zsh glob ci-dessous).
Ulysse BN
5

En utilisant z-shell (zsh), vous pouvez utiliser

ls -laR *(^U)

ou

ls -la **/*(^U)

pour rechercher de manière récursive tous les fichiers qui ne vous appartiennent pas.

UN B
la source
Il est vrai que la commande ci-dessus ne listera pas les fichiers de points, même avec le -adrapeau à cause de l'expansion des caractères génériques. Pour attraper les fichiers points utilisent zsh l' dotgloboption: setopt dotglob. En une ligne: (setopt dotglob; ls **/*(^U) ). Les parenthèses doivent être exécutées dans un sous-shell afin que vous n'ayez pas à exécuter setopt nodotglobaprès avoir terminé.
Zorawar