No Bash, posso especificar nomes Foo1.png
de arquivos Foo9.png
usando Foo[0-9].png
. Eu posso evitar Foo5.png
usar Foo[1-46-9].png
. Existe alguma maneira de especificar uma série de exclusões para o dígito decimal?
Por exemplo, se eu quisesse excluir Foo3.png
e Foo7.png
, eu poderia usar Foo[0-24-689]
, mas acharia um padrão como Foo[^37].png
ser muito mais fácil de ler. Essa é a sintaxe do Vim, e o Bash não a interpreta excluindo 3
e 7
. Mas eu queria saber se o Bash tem um padrão para exclusão de caracteres em sua expansão de nome de arquivo.
Se houver uma solução que corresponda a todos os caracteres únicos diferentes de 3
ou 7
, isso também seria útil, em algumas circunstâncias (como a que motivou essa pergunta, apesar da descrição excessivamente simplificada acima).
O
bash
shell entende tanto o padrão de expressão regularFoo[^37].png
quanto o padrão de shell padrãoFoo[!37].png
, portanto, você poderá usá-los sem problemas, a menos que tenha outros arquivos com nomes comoFood.png
ouFool.png
etc. que precise excluir.Se
Foo[^37].png
não funcionar como esperado em seu script, isso indica que você não está usandobash
, mas algum outro shell como, por exemplodash
(possivelmente em um sistema não GNU?) Você executou o scriptsh
na linha de comando? Em caso afirmativo, não faça isso e use uma#!
linha apropriada no script apontando para o interpretador de shell correto.Supondo que existam nomes como
Food.png
esse que você deseja excluir, para garantir que você sejaFoo
seguido por um dígito,.png
depois useFoo[0-9].png
. Para excluirFoo3.png
eFoo7.png
a partir deles, teste-os separadamente.Ou, usando
bash
a sintaxe,Como Stéphane Chazelas menciona nos comentários abaixo, você pode usar um padrão de globbing estendido
bash
para testar dígitos diferentes de3
e7
. Habilite padrões de globbing estendidos comshopt -s extglob
e use o padrãoMas seria mais rápido para mim escrever o script pessoalmente como na primeira metade desta resposta (ou usar
Foo[01245689].png
para esse assunto), executá-lo e pronto, antes de decidir que acredito que essa expressão está fazendo a coisa certa (é faz).