Quando uso o código abaixo no terminal Ubuntu, ele funciona bem:
rm !(*.sh) -rf
Mas se eu colocar o mesmo código de linha em um script de shell (clean.sh) e executar o script de shell do terminal, ele emitirá um erro:
Script clean.sh:
#!/bin/bash
rm !(*.sh) -rf
O erro que eu recebo:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
você pode ajudar?
command-line
bash
scripts
rm
Tal
fonte
fonte
Respostas:
rm !(*.sh)
é umaextglob
sintaxe que significa remover todos os arquivos, exceto os que têm a.sh
extensão.Na sua
bash
instância interativa , a opção shellextglob
está ativada:Agora, como seu script está sendo executado em um subshell, você precisa habilitá-lo
extglob
adicionando isso no início do script:Portanto, seu script se parece com:
EDIT:
Para remover todos os arquivos, exceto os de
.sh
extensão, useGLOBIGNORE
(como você não deseja habilitarextglob
):Exemplo:
fonte
shopt -s extglob
?Ok, é um post cruzado, mas tenho que escrever uma resposta. ;)
Você poderia usar
find
em vezfonte
Você precisa ativar
extglob
:fonte
man bash
. Permite o globbing estendido como!(...)
.shopt -s extglob