De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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