Uma maneira de fazer exatamente o que você quer com um comando find
é
find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'
-o
significa OR.
Este comando processa todos os objetos na árvore do projeto
que são do tipo “arquivo” ou tipo “diretório”,
e executa comandos diferentes com base no tipo de cada objeto.
Você pode tornar isso um pouco mais eficiente
substituindo os pontos e vírgulas ( ';'
) por sinais de mais ( +
);
isso diz find
para executar chmod 644
uma vez, com todos os nomes dos arquivos simples como argumentos,
e para executar chmod 755
uma vez, com todos os nomes dos diretórios como argumentos.
A propósito, você não precisa dizer ./
para qualquer coisa diferente de executar um programa no diretório atual
(embora ocasionalmente venha a calhar
para manipular arquivos cujos nomes começam com alguns caracteres especiais).
Gostaria de saber como são as suas permissões agora
(antes de executar um chmod
de árvore recursiva).
Geralmente, os arquivos não recebem os bits de permissão de execução ativados
a menos que eles realmente programas executáveis,
ou você acidentalmente fez algo como chmod -R 755
.
Os diretórios geralmente não desativam seus bits de permissão de execução
a menos que você tenha feito algo catastrófico como chmod -R 644
.
Se você errou as permissões
porque você fez um chmod -R
imprudente com um modo numérico,
ignore esta seção
e ficar com o comando no início desta resposta.
Mas, se suas permissões são geralmente saudáveis, e você só quer impor um padrão de permissões de leitura / gravação para o usuário, e permissões somente leitura para todos os demais (grupo e mundo), você pode fazer
chmod -R +rX,u+w,go-w my_web_app_project
em que
-
+rX
significa+r,+X
(observe queX
é capitalizado - isso é importante).-
+r
significa definir permissão de leitura para usuário, grupo e outros. -
+X
significa definir permissão de execução para usuário, grupo e outros se estiver atualmente definido para qualquer um deles ou se o objeto for um diretório.
-
-
u+w
significa definir permissão de gravação para o usuário. -
go-w
significa desativar a permissão de gravação para grupos e outros.
Resumo de alguns pontos principais:
- É claro que você pode
chmod
apenas as coisas que possui (a menos que você seja privilegiado) e que não sejam somente leitura. Se houver coisas no seu diretório que você não podechmod
, qualquer um desses comandos causará um erro. - Os comandos
find
não farão nada com as coisas que não são diretórios ou arquivos (por exemplo, pipes nomeados). - O comando
find
com-exec chmod 755 {} +
pode falhar se você ainda não tiver permissão de leitura e execução em todas as pastas no seu diretório de nível superior. - O comando
chmod -R +rX,u+w,go-w
será- define todos os diretórios para o modo 755,
- ignorar links simbólicos,
- para todos os outros tipos de arquivo (incluindo, por exemplo, pipes nomeados):
- defina como 755 se já tiver pelo menos um
x
bit; caso contrário, - defina como 644.
- defina como 755 se já tiver pelo menos um