Método 1 - stat
Você pode usar o comando stat
para obter os bits das permissões. stat
está disponível na maioria dos Unixes (OSX, BSD, não AIX pelo que posso encontrar). Isso deve funcionar na maioria dos Unixes, exceto OSX & BSD pelo que eu posso encontrar.
$ stat -c "%a" <file>
Exemplo
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
Use este comando:
$ stat -c "%a" afile.txt
664
E use um grep
simples para ver se o modo de permissões de grupos é 6 ou 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Para o OSX e o BSD, você precisaria usar essa forma de stat
, stat -f
(ou talvez stat -x
) e analisar de acordo. Como as opções para stat
são diferentes, você poderia agrupar esse comando em um comando lsb_release -a
e chamar a versão apropriada com base no sistema operacional. Não é ideal, mas viável. Perceba que lsb_release
é disponível apenas para distros do Linux então outra alternativa precisaria ser desenvolvida para testar outros sistemas operacionais Unix .
Método 2 - encontrar
Acho que esse comando pode servir melhor para você. Eu faço uso de find
e da opção printf
.
Exemplo
$ find a -prune -printf '%m\n'
664
Método # 3 - Perl
O Perl pode ser uma maneira mais portátil de fazer isso, dependendo dos sistemas operacionais que você está tentando abordar.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
NOTA: O texto acima faz uso da função stat()
do Perl para consultar os bits do sistema de arquivos.
Você pode tornar isso mais compacto cancelando o uso de uma matriz, @pv
e lidando diretamente com a saída de stat()
:
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664