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.
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.