Sim, rm *.xvg
excluirá somente arquivos que terminem com .xvg
no diretório atual. Aqui está o porquê.
Quando você digita um comando como este, o trabalho é dividido entre o shell que você está usando (vamos assumir o bash) e o comando binário.
Você pode localizar o binário digitando which rm
. Este pequeno programa cuida de desvincular arquivos. Programas como este podem ser iniciados a partir da linha de comando e podem ler uma lista de argumentos prog arg1 arg2 arg3
quando eles são iniciados. No caso de rm
, eles são interpretados como uma lista de nomes de arquivos completos a serem excluídos. Portanto, se você estiver em um diretório que contenha o arquivo foo.bar
, digitar delete 'foo.*'
resultará em rm: foo.*: No such file or directory
. Observe as aspas simples ao redor do padrão de arquivo, elas dizem ao shell para passar o argumento para o shell como ele é.
No entanto, se você digitar rm *.bar
no mesmo diretório, ele excluirá o arquivo. O que está acontecendo aqui é que o seu shell, que é o programa que você está usando para digitar comandos, está realizando algumas transformações antes de passar os argumentos para o comando. Um deles é chamado de 'expansão de nome de arquivo', também conhecido como 'globbing'. Você pode ver uma lista de expansões de nome de arquivo bash aqui . Uma das expansões mais comuns é *
, que é expandida para nomes de arquivos no diretório atual.
Uma maneira simples de observar os globs no trabalho é usar echo
, que imprime todos os argumentos passados para ele através do shell. Portanto, digitar echo *
no mesmo diretório gerará foo.bar
. Portanto, quando você digita rm *.bar
, o que realmente está acontecendo é que o shell expande a lista de argumentos para foo.bar
e passa para o comando rm
.
Existem algumas maneiras de controlar o globbing. Em versões recentes do bash, por exemplo, você pode ativar uma opção chamada globstar que fará a expansão recursiva. Digitar echo **/*.bar
mostrará uma lista de todos os arquivos que terminam em .bar
em todas as subpastas. Portanto, digitar rm **/*.bar
no globstar enabled bash excluirá de forma recursiva todos os arquivos correspondentes nas subpastas.