Qual seria o melhor comando shell "one liner" que eu poderia usar para listar todos os arquivos em um diretório, mostrando apenas aqueles que possuo?
Responder1
Uma linha curta seria:
find . -maxdepth 1 -user $USER
Se você estiver procurando no diretório atual, poderá omitir o arquivo .
. Se você não sabe se $USER
está disponível, você pode substituí-lo por $LOGNAME
ou $(whoami)
.
Adicione -ls
para mostrar detalhes do arquivo, por exemplo:
find / -maxdepth 1 -user root -ls
Se você deseja fornecer sinalizadores personalizados, ls
você pode usá-los via -exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(Nesse caso, o -d
sinalizador to ls
é necessário para listar os diretórios como eles próprios e não como seu conteúdo.)
Responder2
Use o comando abaixo
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
encontre todos os arquivos em todo o sistema pertencentes ao nome de usuário. Se você encontrar em um diretório específico, basta substituir o local / .
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
NB:2>/dev/null anula a saída de erro.
Responder3
Como você não especificou o formato da saída, você também pode fazer isso com ls e grep:
ls -lG | grep username
Primeiro usamos ls com o parâmetro -l, para obter a listagem que inclui nome de usuário e nome de grupo.
Em seguida, removemos o nome do grupo do resultado com o parâmetro -G.
Depois disso, simplesmente canalizamos para grep e obtemos todos os resultados com o nome de usuário desejado.
EDITAR: Como apontado nos comentários, isso énão é um cofreou solução à prova de balas - no entanto, dependendo das circunstâncias, pode ser rápida e suja. Interativamente, pode ser aceitável, mas você não deve usá-lo em nenhum script!
Responder4
Com zsh
, você poderia fazer isso usando oqualificador globalu
:
u
eu iaarquivos pertencentes ao ID do usuárioeu iase isso for um número. De outra forma,eu iaespecifica um nome de usuário: o caractere após '
u
' será considerado um separador e a string entre ele e o próximo separador correspondente será considerada um nome de usuário. Os separadores iniciais '[
', '{
' e '<
' correspondem aos separadores finais ']
', '}
' e '>
', respectivamente; qualquer outro caractere corresponde a si mesmo. Os arquivos selecionados são de propriedade deste usuário. Por exemplo, 'u:foo:
' ou 'u[foo]
' seleciona arquivos pertencentes ao usuário 'foo
'.
então, por exemplo, com o usuárioID
print -rl ./*(u1027)
ou com nome de usuário
print -rl ./*(u_yourusernamegoeshere_)
Como de costume, você pode combiná-lo com outros qualificadores, modificadores, etc., por exemplo, para listar apenas arquivos regulares, ocultos ou não, de propriedade do usuário UID
1027
e classificados por mtime
:
print -rl ./*(.Domu1027)