Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
chmod, chown, chgrp, find e xargs
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 01 de Julho de 2007
Para alterar recursivamente a propriedade de uma árvore de diretórios para uma determinada pessoa e grupo, usamos o comando chown:
chown -R queiroz:queiroz ~queiroz
O argumento queiroz:queiroz identifica o nome do usuário e o grupo ao
qual pertence. Fornecer os dois argumentos é opcional, podemos especificar
apenas o nome do usuário, como abaixo:
chown -R queiroz ~queiroz
Caso queiramos trocar apenas a propriedade do grupo, o comando é outro, chgrp:
chgrp -R queiroz ~queiroz
Até aqui tudo bem. Entretanto, frequentemente usamos os comandos chgrp e chown em conjunto com o comando xargs e find:
find . -type d | xargs chown -R queiroz
Com o comando acima, pretendo alterar apenas a propriedade dos diretórios a partir de um determinado ponto. Se existir algum diretório com um nome que contenha espaços em branco, teremos problema.
# find . -type d | xargs chown -R queiroz chown: impossível acessar `./Rubens': Arquivo ou diretório não encontrado chown: impossível acessar `Queiroz': Arquivo ou diretório não encontrado chown: impossível acessar `de': Arquivo ou diretório não encontrado chown: impossível acessar `Almeida': Arquivo ou diretório não encontrado chown: impossível acessar `./Rubens': Arquivo ou diretório não encontrado chown: impossível acessar `Queiroz': Arquivo ou diretório não encontrado chown: impossível acessar `de': Arquivo ou diretório não encontrado chown: impossível acessar `Almeida/Dia': Arquivo ou diretório não encontrado chown: impossível acessar `de': Arquivo ou diretório não encontrado chown: impossível acessar `Faxina': Arquivo ou diretório não encontrado
No exemplo acima eu criei dois diretórios com espaços em branco em seu nome:
Rubens Queiroz de Almeida e Dia de Faxina. O comando xargs forneceu como entrada
ao comando chown, as partes individuais dos nomes, levando em consideração o espaço em
branco como delimitador do nome.
Para resolver este problema, precisamos informar ao comando xargs que o delimitador é outro:
find . -type d -print0 | xargs -0 chown -R queiroz
A opção -print0 termina os nomes dos arquivos com um zero, de forma que
os nomes de arquivos com espaços em branco sejam corretamente tratados. Da
mesma forma, no comando xargs o argumento -0 indica que o separador do
nome dos arquivos é o zero e não o espaço em branco.
O argumento -print é opcional. Versões antigas de sistemas Unix exigiam que
fosse especificado no comando find. As versões modernas de sistemas GNU/Linux
e FreeBSD não exigem sua especificação, a não ser em casos como acima, em
que atribuimos um valor diferente do padrão ao delimitador do nome de arquivos.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.




