Se eu definir o diretório atual / ativo (navegando até ele usando cd
) para algum diretório específico e digite:
rm *.xvg
O que esse comando fará? É verdade que o comando acima excluirá apenas arquivos com a extensão .xvg
somente no diretório de trabalho?
Eu estava nervoso por tentar isso antes de perguntar, porque quero ter certeza absoluta de que o comando acima excluirá apenas .xvg
arquivos LOCALIZADOS NO DIRETÓRIO DE TRABALHO .
rm -f {*.xvg,.*.xvg}
para remover também arquivos ocultos. Erm -R -f {*.xvg,.*.xvg}
para remover também diretórios.Você não precisa navegar para o diretório, basta usar
No caso de um erro de digitação ou erro semelhante no caminho, onde / som / dir não existe:
excluirá acidentalmente todos os arquivos .xvg no diretório atual. O primeiro comando não será, e você não precisa fazer o cd novamente.
Uma maneira alternativa seria usar o find:
fonte
Sim,
rm *.xvg
somente os arquivos que terminam com.xvg
no diretório atual serão excluídos . 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 esse podem ser iniciados na linha de comando e podem ler uma lista de argumentosprog arg1 arg2 arg3
quando iniciados. No caso derm
, eles são interpretados como uma lista de nomes de arquivos totalmente qualificados a serem excluídos. Portanto, se você estiver em um diretório que contém o arquivofoo.bar
, a digitaçãodelete 'foo.*'
resultará emrm: foo.*: No such file or directory
. Observe as aspas simples ao redor do padrão do arquivo; elas dizem ao shell para passar o argumento para o shell como está.No entanto, se você digitar
rm *.bar
no mesmo diretório, ele excluirá o arquivo. O que está acontecendo aqui é que seu shell, que é o programa que você está usando para digitar comandos, está executando 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 a ele através do shell. Então, digitandoecho *
no mesmo diretório será exibidofoo.bar
. Portanto, quando você digitarm *.bar
, o que realmente está acontecendo é que o shell expande a lista de argumentos parafoo.bar
e passa isso para orm
comando.Existem algumas maneiras de controlar o globbing. Nas versões recentes do bash, por exemplo, você pode ativar uma opção chamada globstar, que fará a expansão recursiva. A digitação
echo **/*.bar
mostrará uma lista de todos os arquivos que terminam.bar
em todas as subpastas. Portanto, digitar orm **/*.bar
basstar ativado pela globstar excluirá recursivamente todos os arquivos correspondentes nas subpastas.fonte
Comando:
funciona para mim
Comando:
dá o comando error (em polonês, traduzido):
em
fonte