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.

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

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

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 ....


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> 

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.