Quero definir a permissão 755 em todos os arquivos e subdiretórios em um diretório específico, mas quero executar o chmod 755 apenas para os componentes que não têm permissão 755.
find /main_directory/ -exec chmod 755 {} \;
Se o find
comando retornar uma lista longa, isso levará muito tempo. Eu sei que posso usar o comando stat para verificar a permissão no nível do arquivo Octal de cada componente e, em seguida, usar if-else para alternar a permissão do arquivo, mas existe uma abordagem de linha única usando find
e xargs
para verificar primeiro qual permissão o arquivo / diretório possui e, em seguida, use chmod
para alterá-lo para 755 se estiver definido para outra coisa.
command-line
find
chmod
Kumarjit Ghosh
fonte
fonte
u+rw,go+r,go-w,ugo+X
- observe a capital.Respostas:
Se você deseja alterar as permissões para
755
arquivos e diretórios, não há benefício real em usá-lofind
(pelo menos do ponto de vista de desempenho) e você pode fazer issoSe você realmente deseja usar
find
para evitar alterar permissões em itens que já possuem755
permissões (para evitar a atualização do carimbo de data / hora do ctime), também deve testar as permissões atuais em cada diretório e arquivo:Ele
-exec ... {} +
coletará o maior número de nomes de caminhos possíveis que passarem no! -perm 0755
teste e será executadochmod
em todos eles de uma só vez.Geralmente, alguém desejaria alterar permissões em arquivos e diretórios separadamente, para que nem todos os arquivos sejam executáveis:
fonte
+
vez de;
faz uma grande diferença aqui.Como você
find
obteve a-exec ... +
sintaxe, não há muito sentido em usá-loxargs
, mas como você pede:fonte
-0
(em combinação com o-print0
find; que é a extensão GNU) pode ser bastante problemático em termos de segurança se um invasor em potencial puder criar nomes de arquivos que incluem espaços em branco ou outros caracteres especiais. Então é melhor ficar com-exec
quando puderxargs
(apenas use-exec
), e se você o usar, deverá usar-print0
/-0
como Matija diz.