Eu estava tentando remover arquivos que terminam com til usando o comando rm *.*~
, mas isso não remove arquivos que começam com a .
e terminam com ~
, por exemplo .somefile~
. Eu também tentei rm *~
, mas isso também não funciona para arquivos começando com .
. Alguém pode explicar por que isso acontece?
Quero remover todos os arquivos que terminam com ~
, independentemente de começarem com a .
ou não (eu estava tentando fazer isso sem find/exec). Isso é possível?
Responder1
Arquivos que começam com a .
ficam ocultos por padrão e não aparecem em um arquivo ls
. Como você pode não tê-los visto, os shells geralmente não corresponderão a esses arquivos, a menos que você os inclua manualmente. Você pode fazer isso da seguinte maneira:
rm *~ .*~
Responder2
Embora a resposta acima seja provavelmente mais segura (devido a menos efeitos colaterais), para completar....
O shell bash (que é o que a maioria das pessoas executa no Linux) tem um sinalizador para indicar se deve ou não incluir dotfiles em globs. Você configura com shopt -s dotglob
. A sequência abaixo é antes de definir o sinalizador e depois da configuração. Observe que o rm irá removê-lo assim que o dotglob for definido.
$ touch .somefile~
$ rm *~
rm: cannot remove `*~': No such file or directory
$ ls -A
.somefile~
$ shopt -s dotglob
$ rm *~
$ ls -A
$
Um pouco menos seguro; em teoria, você pode esquecer se isso está definido ou não. Mas se você quiser definir isso em todos os lugares e for consistente, pode ser o que você deseja.