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: Emanuel Haine
Data de Publicação: 24 de julho de 2022
Às vezes nos deparamos com arquivos que possuem caracteres especiais, como
por exemplo: *
, !
, #
, $
, &
, |
, ?
, etc.
É importante lembrar que esses caracteres possuem um papel específico no shell.
Para mais informações, basta consultar a documentação.
Quando um arquivo é criado com esses caracteres, não podemos manipulá-los como se fosse um arquivo comum. Isso é devido ao fato do papel que eles desempenham dentro do shell.
Para isso, precisamos garantir que eles sejam intrepretados como uma string comum.
O trecho abaixo foi retirado do info do rm:
One common question is how to remove files whose names begin with "-". GNU "rm", like every program that uses the "getopt" function to parse its arguments, lets you use the "--" option to indicate that all following arguments are non-options. To remove a file called "-f" in the current directory, you could type either: rm -- -f or: rm ./-f The Unix "rm" program's use of a single "-" for this purpose predates the development of the "getopt" standard syntax. An exit status of zero indicates success, and a nonzero value indicates failure.
Como vocês podem ver, não é nada complicado. Basta adicionar --
ou ./
para informar ao bash que esses caracteres são somente parte de uma string,
e nada mais além disso.
Digamos que temos dois arquivos nessas condições
$ ls -l
total 0
-rw-rw-r--. 1 user group 0 Jul 11 23:39 --
-rw-rw-r--. 1 user group 0 Jul 11 23:41 '-3$%text--$&||--text'
Se eu tentar manipular esses arquivos usando a sintaxe padrão, a operação vai retornar um erro:
$ mv -- file mv: missing destination file operand after 'old' Try 'mv --help' for more information. $ mv '-3$%text--$&||--text' file mv: invalid option -- '3' Try 'mv --help' for more information.
Agora, se eu usar --
ou ./
logo após o comando mv
ou rm
,
ou qualquer outro comando relacionado, eu consigo executar minha operação
com sucesso.
$ mv -- -- file $ ls -l total 0 -rw-rw-r--. 1 user group 0 Jul 11 23:41 '-3$%text--$&||--text' -rw-rw-r--. 1 user group 0 Jul 11 23:39 file $ rm -- '-3$%text--$&||--text' $ ls -l total 0 -rw-rw-r--. 1 user group 0 Jul 11 23:39 file
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários