Estou procurando um comando que retorne o proprietário de um diretório e somente isso - como uma expressão regular que analisa o ls -lat
comando ou algo semelhante? Eu quero usar o resultado em outro script.
shell-script
ls
Jason
fonte
fonte
stat
(um padrão para todo o site) em/usr/local/bin
algum lugar da casa do usuário) e raramente está disponível em outros departamentos.stat -c %U
tem a vantagem de também trabalhar com o BusyBox , se ostat
comando estiver compilado.stat -c '%U' DIR
imprimiráUNKNOWN
, o que é menos útil ou mais apropriado, dependendo de como você o vê.Analisar a saída de
ls
raramente é uma boa ideia , mas obter os primeiros campos é uma exceção, pois na verdade funciona em todos os departamentos "tradicionais" (não funciona em plataformas como algumas implementações do Windows que permitem espaços nos nomes de usuário).Outra opção é usar um
stat
comando, mas o problema comstat
o shell é que existem vários comandos com sintaxe diferente; portanto,stat
em um shell, o script não é portável (mesmo em instalações Linux).Observe que testar se um determinado usuário é o proprietário é uma proposta diferente.
fonte
ls | awk
Infelizmente, existem algumas ressalvas na abordagem, como observei aqui . Ainda não encontrei uma solução para o problema "arquivo / diretório de destino é um link simbólico com um nome diferente", que mencionei em meu comentário recente.find . -user "$username" -print -prune -o -prune
você só poderia fazerfind . -maxdepth 0 -user "$username"
awk 'NR==1 {print $3}'
vez de apenasawk '{print $3}'
? Não sei por queNR==1
é necessário aqui.ls
onde uma nova linha em um caminho faz com que a linha seja dividida em duas (que eu acredito que seja o caso extremo que você está tentando cobrir)? No GNUls
(versão nova), BusyBoxls
e FreeBSD,ls
uma nova linha é retornada como$'\n'
,?
e?
, respectivamente.Também é possível fazer isso com o GNU find:
Isso não é portátil fora do sistema GNU, mas ficaria surpreso ao encontrar uma distribuição Linux onde não funcione.
fonte
find
que não possui-printf
.-printf
:-(.No bash puro, você pode converter a saída de
ls
em uma matriz e indexá-la.Não é tão elegante como a utilização
stat
,find
ouawk
, mas poderia trabalhar em uma pitada.fonte