Método # 1 - stat
Você pode usar o statcomando para obter os bits de permissão. statestá disponível na maioria dos Unixes (OSX, BSD, não AIX pelo que posso encontrar). Isso deve funcionar na maioria dos Unixes, exceto OSX e BSD, pelo que 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 simples greppara ver se o modo de permissões de grupos é 6 ou 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Para OSX e BSD você precisa usar esta forma de stat, stat -f(ou talvez stat -x), e analisar em conformidade. Como as opções statsão diferentes, você pode agrupar esse comando em um lsb_release -acomando e chamar a versão apropriada com base no sistema operacional. Não é o ideal, mas viável. Perceba que lsb_releaseestá disponível apenas para distribuições Linux, portanto, outra alternativa precisaria ser criada para testar outros sistemas operacionais Unix.
Método # 2 - encontrar
Acho que esse comando pode atendê-lo melhor. Eu uso finde o printfinterruptor.
Exemplo
$ find a -prune -printf '%m\n'
664
Método # 3 - Perl
Perl pode ser uma maneira mais portátil de fazer isso, dependendo dos sistemas operacionais que você está tentando cobrir.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
NOTA: O item acima utiliza a stat()função do Perl para consultar os bits do sistema de arquivos.
Você pode tornar isso mais compacto renunciando ao uso de uma matriz @pve lidando com a saída stat()diretamente:
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664