
Preciso verificar as permissões de arquivo dos diretórios , /usr
e o conteúdo dos subdiretórios. Tomei as permissões de arquivo do diretório e seus arquivos de subdiretório em uma matriz separadamente para cada um de , e :/tmp
/var
/usr
/tmp
/var
fun() {
set -A PR_Uperm -- "/usr" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
set -A PR_Tperm -- "/tmp" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
fun2
}
Finalmente, quero que esses arrays separados estejam em um único array que esteja em uma função diferente, já que temos escopo dinâmico em scripts. Eu tentei como abaixo:
fun2(){
set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}
quando executo o script, estou recebendo este erro.
script.sh:79919: subscrito fora do intervalo
quando eu dou apenas um array parapermanentearray como abaixo, não estou recebendo nenhum erro.
set -A perm ${PR_Tperm[@]}
Eu tenho tantas entradas para armazenarpermanentevariedade. Como posso aumentar o tamanho do array dinamicamente?definir -Anão está relacionado ao bash, mas esse aumento dinâmico pode ser o mesmo para bash e ksh, então eu o incluí.
Tentei armazenar em um arquivo temporário conforme mostrado abaixo:
printf "/usr\n`ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`\n" >> /tmp/output2.txt # not working in ksh, but working when I run as bash
ksh: no space
ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}' >> /tmp/output2.txt # it is working
Por que o primeiro comando foi executado com sucesso no bash, mas no ksh?
Responder1
Bash não tem, se bem me lembro, nenhum limite interno para o tamanho do array. KornShell93 suporta índices de até cerca de 64k em versões recentes (e até 4.095 em versões mais antigas).
Existe um utilitário chamado mtree
que é usado para comparar uma hierarquia de arquivos com uma especificação. Qualquer desvio da especificação (arquivos ou diretórios ausentes ou discrepâncias de propriedade/permissão) é relatado e opcionalmente corrigido (se possível).
Como não sei em qual Unix você está, não posso mais indicar onde encontrar esse utilitário. Está dentroSistema básico do OpenBSD, mas é evidentemente tambémdisponível para Linux.