recursivamente alterar permissão de arquivo, mas não diretórios?

12

Eu estava fazendo uma alteração recursiva em massa de permissões de alguns arquivos que eu havia migrado para um sistema unix. Eu mudei para ug + rw, mas depois descobri que não conseguia atravessar subdiretórios. Eu olhei para a man page para chmod e não vi nenhuma explicação para excluir diretórios, então eu pesquisei um pouco e descobri que as pessoas usavam find para alterar recursivamente as permissões em diretórios para 'executar' para usuário e grupo. Eu fiz isso e então eu pude olhar para eles.

Mas pareceu-me que eu deveria ser capaz de fazer isso encontrar chmod - para alterar recursivamente os arquivos para ler / escrever, mas não tornar os diretórios transitáveis. Eu fiz isso da maneira certa ou há uma maneira mais simples de fazer isso?

    
por user394 01.09.2011 / 16:31

2 respostas

12

A melhor solução deve ser

chmod -R ug=rwX,o=rX /path

em que o capital X significa: set execute bit if

the file is a directory or already has execute permission for some user

(citado em chmod man page).

Ou também, se você quiser usar find

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)
    
por 01.09.2011 / 16:53
2

Usar a localização é o caminho "certo" e a única forma programática, embora haja variações:

find . -type f -exec chmod ug+rw {} +  # "+" may not be on all systems

ou

find . -type f -print0 | xargs -r0 chmod ug+rw  # similar to the -exec + functionality

ou o mais lento:

find . -type f -exec chmod ug+rw {} \;  # in case xargs is not installed

Cada um deles seleciona um arquivo (não diretório, não symlink) e aplica o comando chmod nele. Os dois primeiros reduzem o número de chamadas para chmod , anexando o arquivo ao final de uma linha de comandos interna a cada vez até que um máximo seja atingido (geralmente 10), depois chama o comando e começa a reconstruir um novo comando. A última instrução gera um novo processo para cada arquivo, portanto, é menos eficiente.

    
por 01.09.2011 / 16:54