Veja a saída do erro: você deve estar vendo find: '…' Permission denied
erros. A primeira coisa que você faz é remover todas as permissões de acesso de $topdir
, o que evita a repetição da mesma. Nenhum dos comandos chmod
que você espera são executados, exceto o primeiro.
Se você deseja remover a permissão para acessar todos os diretórios em uma árvore, você precisa fazê-lo de dentro para fora. Caso contrário, quando você se desconectar do diretório pai, não poderá mais recorrer a ele.
system('find',
$topdir,
'-depth',
'-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);
Como você está usando o Perl, use File::Find
em vez de chamar o programa externo find
. Use a função finddepth
para obter a ordem correta de passagem.
Parece inútil fazer duas travessias. Em vez disso, faça um único percurso e defina diretamente as permissões de arquivo para o que você deseja, por exemplo, chmod 0750
ou seja o que for. Usar File::Find
proporcionará maior flexibilidade para, por exemplo trate diretórios e arquivos regulares de maneira diferente.