Listar diretórios usa o bit executável, não acho que a leitura realmente afete diretórios. Você terá que definir permissões em cada arquivo individual para evitar que elas sejam lidas ou gravadas. Os comandos a seguir farão tudo isso para você, execute-os na pasta que você quer que isto comece em:
find . -type d | xargs chmod o=rx
find . -type f | xargs chmod o=
find
encontrará recursivamente arquivos ( -type f
) e diretórios ( -type d
) e imprimirá seus nomes (sem outra ação especificada), e isso será canalizado para xargs
, que executa seus argumentos com os arquivos lê do tubo. chmod
altera as permissões para outros ( o
, significando nem você nem outros no grupo proprietário do arquivo) para exatamente ( =
) read / list ( rx
) para pastas e nada para arquivos simples.
Como grumbel apontou em um comentário, isso só funcionará em nomes bem comportados. Para obtê-los todos, use sua solução:
find . -type d -print0 | xargs -0 chmod o=rx
find . -type f -print0 | xargs -0 chmod o=
ou encontrado em -exec
:
find . -type d -exec chmod o=rx '{}' ';'
find . -type f -exec chmod o= \{\} \;
Note que você pode citar as chaves e o ponto-e-vírgula como a primeira linha, ou evitá-los como o segundo, eles só precisam estar lá em argumentos separados. Além disso, -exec
executará o chmod uma vez para cada arquivo, enquanto o xargs fará isso no menor número possível de comandos (com base no comprimento máximo da linha de comando). É por isso que geralmente prefiro xargs.