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

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

luiz
luizsouza99

(usa Linux Mint)

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

pelo que percebi vc dá o comando shopt para saber se a opção extglob está habilitada, se estiver então o !(padrão) deveria funcionar, mais aqui só funciona pelo terminal.


  


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

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

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

certamente o colega Paulo deve ter uma resposta melhor do que a minha..

enquanto isso, faz o teste de colocar no início do seu script
#!/bin/sh 



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

Paulo
paulo1205

(usa Ubuntu)

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

O seu shell deve estar com o valor do extglob ligado porque a distribuição que você usa liga tal opção no momento em que você faz login. Já seu script, que não faz um login, não deve a estar ligando.

O que você tem de fazer é colocar o comando para ligá-la como parte do script, antes de tentar usar a operação controlada por tal opção.


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

luiz
luizsouza99

(usa Linux Mint)

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

Também não deu:

./prog: 6: ./prog: Syntax error: "(" unexpected



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

luiz
luizsouza99

(usa Linux Mint)

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

Deu certo, coloquei o comando "shopt -s extglob" na linha antes do comando citado e funcionou, só que tem de deixar esse no script para ele ligar a opção toda vez que for rodar o programa.

será que tem jeito de fazer isso em definitivo?

de qualquer forma muito obrigado, já resolveu, mesmo tendo que deixar uma linha a mais no script.


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

luiz
luizsouza99

(usa Linux Mint)

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

Funcionou perfeitamente, vou usar esse caso precise dar o comando shopt toda vez que executar o script.

Muito obrigado.


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

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

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

Ryuk escreveu:

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

pois é...

tb achei curioso...

Ryuk escreveu:

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/

O colega Ryuk sempre tem na manga uns comandos bem enxuto..!





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

luiz
luizsouza99

(usa Linux Mint)

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

Deveria ter jeito de escolher mais de uma "melhor resposta", muito obrigado pessoal.


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

Paulo
paulo1205

(usa Ubuntu)

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

O find sugerido pelo Ryuk tem uma vantagem em relação ao globbing estendido, que é a de não expandir a lista de arquivos em memória.

Por outro lado, trata-se de um comando externo a mais, que implica a criação de um processo separado. Além disso, ela não é totalmente equivalente ao que o luizsouza99 estava fazendo, porque esse find opera recursivamente, e a expansão feita pelo shell, não. Isso pode ser muito perigoso, dependendo do diretório onde nosso amigo opera.

Para tornar o find não-recursivo, ou para limitar o nível de recursividade, pode-se usar a opção -maxdepth (por exemplo: “find . -maxdepth 1 -type f -not -iname \*.srt -delete”).


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

luiz
luizsouza99

(usa Linux Mint)

Enviado em 20/03/2018 - 14:14h

Tenho uma grande preocupação que o script delete algo que eu nao queira, vou usar essa opção sim.

muito obrigado.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts