Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

1. Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 10:51h

rm !(*.srt)

Preciso deletar todos os arquivos não .srt de uma pasta, mas no script ele confunde o parentese do comando

Existe alguma maneira desse comando funcionar no script?

obrigado.


  


2. MELHOR RESPOSTA

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 20/03/2018 - 13:22h

Fiz uns testes aqui e realmente o comando quando está no script não funciona, curioso isso:

Use isso como alternativa:
find /diretorio -type f -not -name '*.srt' -delete 

https://www.cyberciti.biz/faq/linux-bash-delete-all-files-in-directory-except-few/

3. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 20/03/2018 - 11:01h

luizsouza99 escreveu:

[...], mas no script ele confunde o parentese do comando

Mas, no terminal esse comando funcionou?

Fiz o teste aqui no meu terminal (bash) e não funciona: aparece "event not found"







4. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 20/03/2018 - 11:05h

Caso funcione no seu terminal mas não funciona no script, então, provavelmente é porque o terminal está utilizando um determinado interpretador de comandos (que consegue ler corretamente o seu código), porém, o script está utilizando um outro interpretador de comandos.

Tente o seguinte:

- Veja qual é o interpretador de comandos do seu terminal:
 echo $SHELL 


- Na primeira linha do script coloque:
 #!/bin/nomedointerpretador 




5. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 11:49h

echo $SHELL = /bin/bash

no script = #!/bin/bash


6. Re: Terminal reconhece mas no script não -> rm !(*.srt)

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 20/03/2018 - 11:53h

luizsouza99 escreveu:

echo $SHELL = /bin/bash

no script = #!/bin/bash

isso...

como aqui no meu também é "bash" e não deu certo nem no terminal, portanto, nem no script...

então, imagino, que no seu também não deu certo no terminal.... é isso..?





7. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 12:27h

Não,

dá certo no terminal, mas quando executo no script aparece essa mensagem.

./prog: linha 4: erro de sintaxe próximo do `token' não esperado `('
./prog: linha 4: `rm !(*.srt)'


8. Re: Terminal reconhece mas no script não -> rm !(*.srt)

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/03/2018 - 12:27h

Da documentação do bash:

If the extglob shell option is enabled using the shopt builtin, following pattern matching operator is recognized as well:
              !(pattern-list)   Matches anything except one of the given patterns 


Suponho, então, que você deva considerar os valores da opção extglob no shell e no seu script.


9. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 12:29h

uso com o rm mesmo ?


10. Re: Terminal reconhece mas no script não -> rm !(*.srt)

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/03/2018 - 12:31h

extglob é uma opção do Bash que controla se o operador !(...) funciona ou não. Essa opção pode ser manipulada por meio do comando interno do Bash shopt.


11. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 12:53h

Dei o comando shopt e ele mostra que a opção extglob está on.

então quer dizer que o comando !(...) deveria funcionar né ?


12. Re: Terminal reconhece mas no script não -> rm !(*.srt) [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 20/03/2018 - 13:07h

paulo1205 escreveu:

extglob é uma opção do Bash que controla se o operador !(...) funciona ou não. Essa opção pode ser manipulada por meio do comando interno do Bash shopt.

interessante...

não conhecia esse conjunto de opções...





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts