Procurando arquivos que NÃO pertencem a alguém


182

Eu estou olhando recursivamente através de diretórios para encontrar arquivos que não pertencem a um usuário específico e não tenho certeza de como escrever isso.

Respostas:


274

O utilitário find (1) possui primárias que podem ser negadas ("revertidas") usando o "!" operador. No prompt, é necessário, no entanto, escapar da negação com uma barra invertida, pois é um metacaractere de concha. Resultado:

find . \! -user foo -print

6
escapar da !parece ser opcional
doub1ejack

1
canalizar a saída para xargs -I{} -P3 -- ${cmdhere} {}que $ {cmdhere} opere em cada arquivo em paralelo. cmdhere :: = utilitários unix padrão; utils Unix Padrão :: = chmod, chown, stat, ls, ...
Dwight Spencer

1
@sorin você quer dizer a find . ...tubulação ou xargsa primeira ou a segunda maneira?
Kev

3
find tem a bandeira -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens

1
como adicionar informações do proprietário como saída?
Duc Tran

38

Procurando arquivos que NÃO pertencem a alguém

Outros responderam à pergunta "NÃO pertencente a um usuário específico" no corpo. Aqui está um que responde à pergunta do titular, mas não foi fornecido:

$ find / -nouser

Você pode usá-lo assim:

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

E um relacionado:

$ find / -nogroup

3
Dou-lhe um voto pelo tecnicismo, mas as pessoas geralmente dizem "não pertencem a ninguém" se elas significam o que você está interpretando.
Shibumi

2
@Shibumi - Sim, parece certo para aqueles cabelos que partem. O problema que enfrentei foi que eu precisava encontrar arquivos literalmente não pertencentes a nenhum usuário. Surgiu após uma atualização e migração do servidor web. Alguns IDs de usuário / grupo foram alterados, então eu precisava criar um script para um chown.
JWW

12

-userlocaliza por usuário ou ID do usuário e !inverte o predicado. Então ! -user ...,.


2
Voto negativo porque não adiciona nada à resposta aceita e mascara outras respostas possíveis (como o padrão zsh glob abaixo).
Ulysse BN

9

Você pode usar isto:

find <dir> ! -user <username> 

2
Voto negativo porque não adiciona nada à resposta aceita e mascara outras respostas possíveis (como o padrão zsh glob abaixo).
Ulysse BN

5

Usando o z-shell (zsh), você pode usar

ls -laR *(^U)

ou

ls -la **/*(^U)

para procurar todos os arquivos recursivamente não pertencentes a você.


É verdade que o comando acima não listará arquivos de ponto, mesmo com o -asinalizador devido à expansão do curinga. Para pegar dot arquivos usam o zsh dotglobopção: setopt dotglob. Em uma linha: (setopt dotglob; ls **/*(^U) ). Os parênteses devem ser executados em um subshell, para que você não precise executar setopt nodotglobdepois de terminar.
Zorawar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.