você está aqui: Home  → Arquivo de Mensagens

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.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script