Torna chmod recursivo mais rápido

4

Eu tenho um script de instalação que unzip s um diretório e, em seguida, recursivamente chmod s seu conteúdo.

Surpreende-se o facto de demorar quase 10 vezes o tempo necessário para descompactar, para executar os dois comandos seguintes:

find $dir -type f -exec chmod a+r "{}" \;
find $dir -type d -exec chmod a+rx "{}" \;

Estou fazendo algo errado, existe uma maneira mais rápida de alterar o chmod de todos os arquivos e diretórios?

    
por Benjamin 20.05.2013 / 18:54

4 respostas

10

Você pode se livrar dos comandos find usando o sinal X do chmod:

execute/search only if the file is a directory or already has execute permission for some user (X)

Isso permite que você defina as mesmas permissões em arquivos e diretórios, com diretórios sendo adicionalmente executáveis, com um único comando:

$ chmod -R a+rX $dir
    
por 20.05.2013 / 22:42
5

Você pode fazer o seguinte (assumindo o Linux):

cd $dir
chmod -R a+r .
find . -type d -print0 | xargs -0 chmod a+x

Isso deve ser muito mais rápido do que a combinação dos dois comandos que você indicou na sua pergunta.

    
por 20.05.2013 / 20:07
2

Use tar . Especificamente com o sinalizador -p, --preserve-permissions, --same-permissions .
Você não pode zipar diretamente, mas -z, --gzip , -j, --bzip2 ou -J, --xz deve funcionar bem o suficiente. Se você realmente precisa de um zip, é só um | .

    
por 20.05.2013 / 21:44
0

Dado o seu comando, eu estou pensando que você está gastando tempo esperando encontrar não chmod.

Tente:

chmod -R a+r $dir

O "-R" significa recursivo

Quando você executa o unzip e outros comandos, prefaça-os com

time

Para obter uma medida do tempo gasto para os vários comandos.

    
por 20.05.2013 / 19:00

Tags