Pedindo ajuda para otimizar este achado demorado com dois comandos chmod por arquivo

0

Eu tenho este comando em um arquivo .sh

sudo find $PROJECT_ROOT -type f \
     -exec sudo chmod ugo-x '{}' \; \
     -exec sudo chmod go-w '{}' \; 

Como você pode ver, para o arquivo foreach, preciso remover a permissão de gravação para group e other, deixando 'as is' como a eventual permissão de gravação para o usuário.

E remova a permissão de execução para cada um.

Eu pergunto se existe uma maneira de otimizar isso ... Eu não tenho muita experiência de chmod, mas isso é demorado: 4-5 minutos por pasta de projetos, para cada um dos nossos 41 projetos reais e este deve ser executado 2 vezes por semana. (Por favor, não pergunte por que, não é importante, devo fazê-lo)

    
por realtebo 15.09.2017 / 12:59

2 respostas

1

Além da resposta do @Sisir, a primeira coisa que você pode fazer é usar "+" em vez de ";" no comando find. Isso faz com que ele execute um único comando em todos os arquivos correspondentes, em vez de um comando por arquivo:

sudo find $PROJECT_ROOT -type f -exec chmod a-x,go-w '{}' +

Se os projetos contiverem muitos arquivos (há limites no tamanho da linha de comando), você ainda poderá usar um único chmod por diretório com um pequeno script adicional:

#! /bin/bash
# chmod's all files in the $1 directory
find "$1" -maxdepth 1 -type f -exec chmod a-x,go-w {} +

e depois:

sudo find $PROJECT_ROOT -type d -exec chmod_script {} \;

(btw, eu não acho que você precisa de um sudo no comando executado por find , normalmente deve herdar o userid de find ?)

    
por 15.09.2017 / 14:24
1

Simplifique o comando da seguinte forma e, em seguida, verifique se melhora o desempenho:

sudo find $PROJECT_ROOT -type f -exec sudo chmod a-x,go-w '{}' \; 
    
por 15.09.2017 / 13:49