Eu suspeito que você não esteja no grupo tomcat
enquanto executa os comandos. O problema aqui é que o *
glob será expandido pelo seu shell antes de executar sudo
, então ele será expandido como seu usuário atual. Se esse usuário não estiver no diretório tomcat
, não terá permissão para listar os arquivos em conf
e, portanto, a glob não expande, o que geralmente significa que você recupera a sequência inalterada e, em seguida, tenta o comando sudo
, mas a expansão glob já está feita, então ele está procurando por um arquivo literalmente chamado conf/*
, que claramente não existe.
Você pode usar um usuário com permissão nesse diretório ou pode ter sudo
executando um comando que adia a expansão glob como
sudo sh -c "chmod g+r conf/*"
para que o glob seja expandido após sudo
ter concedido permissões elevadas
Para responder à sua pergunta sobre "o que isso significa", como mencionei acima, o *
é um caractere global para shells. Você pode ler muito sobre isso aqui . É uma maneira de combinar muitos arquivos sem precisar enumerá-los manualmente. Você apenas especifica padrões que correspondem aos nomes que deseja e *
significa basicamente "praticamente qualquer número de vezes"
Como a ordem de operações parece ser importante para essa questão, aqui é uma página sobre a qual se fala a ordem em que diferentes expansões acontecem no shell (pelo menos bash
, mas a maioria é semelhante). Tudo o que acontece antes do comando ser executado, então tudo acontece antes que sudo
seja invocado nesta situação específica.