eu tenho um problema bobo
usr01@srvlnx01:~$ sudo ls /var/opt/gitlab/backups/
1685014011_2023_05_25_13.2.3_gitlab_backup.tar 1685016443_2023_05_25_13.2.3_gitlab_backup.tar tmp
mas
usr01@srvlnx01:~$ sudo ls /var/opt/gitlab/backups/*.tar
ls: cannot access '/var/opt/gitlab/backups/*.tar': No such file or directory
Eu faço algo bobo provavelmente.
As expansões curinga são feitas pelo shell, não por 'ls'. Em outras palavras, eles não esperam que o 'sudo' entre em vigor.
Quando seu shell não tem permissões para ver os arquivos dentro de um diretório protegido, ele não pode expandir o curinga, então o resultado é que 'ls' está sendo solicitado a exibir um arquivo literalmente chamado
*.tar
. (Como mencionado, 'ls' não faz expansão curinga por conta própria.)Como solução geral, faça com que 'sudo' execute outra cópia do shell primeiro - isso lidará com a expansão curinga com privilégios de root:
(
sudo $SHELL -c '...'
pode ser mais geral, mas 'sh' faz o trabalho.)Certos programas podem ter suas próprias opções, como as
--include=...
que expandem curingas no próprio programa. Infelizmente, 'ls' só tem--ignore='*.tar'
, mas nenhuma opção para incluir apenas nomes específicos.A outra resposta faz um ótimo trabalho em dizer por que sua solução específica não está funcionando, então não vou insistir nisso.
Você deve usar um comando robusto como
find
Observe
-type f
porque é importante, certifica-se de corresponder apenas aos arquivos. Não há nada de ilegal em nomear uma pastamydir.tar
e suals
ideia corresponderia a esse diretório.