Não, isso não funcionará em um shell estritamente compatível com POSIX. Aqui está a referência normativa:
Como você pode ver, definitivamente não há regex, nem mesmo a notação de {a, b}.
Gostaria de remover todos os arquivos que terminam com um determinado conjunto de extensões em um
diretório específico em um shell /bin/sh
. Com um /bin/bash
eu posso fazer isso com
regex
assim:
rm path/(*.pdf|*.png)
mas isso não parece funcionar com sh simples. Isso é normal ? Existe algum
tipo de regex support
?
Não, isso não funcionará em um shell estritamente compatível com POSIX. Aqui está a referência normativa:
Como você pode ver, definitivamente não há regex, nem mesmo a notação de {a, b}.
Como afirmado na resposta do user3188445 , isso não é compatível com POSIX.
No entanto, se você quiser fazer isso de qualquer maneira, é necessário usar outra ferramenta como find
:
find dir/ -maxdepth 1 -type f -regex ".*.pdf\|.*.png" -delete
find
pesquisa o diretório dir/
, não recursivamente ( -maxdepth 1
), somente o arquivo é encontrado ( -type f
). A expressão regular corresponde aos arquivos .pdf e .png e -delete
remove os arquivos encontrados.
Para verificar qual shell você está realmente usando com / bin / sh, ligue:
/bin/sh whatshell.sh
e busque o script whatshell desta página:
ligue, e. wget http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh
Saída típica:
$ sh whatshell.sh
SVR4 Bourne shell (SunOS 5 variant)
$ bosh whatshell.sh
SVR4 Bourne shell (SunOS 5 schily variant)
$ bash whatshell.sh
bash 3.2.25(1)-release
$ ksh whatshell.sh
ksh88 Version (..-)11/16/88i
$ ksh93 whatshell.sh
ksh93 Version M 1993-12-28 s+
O POSIX não requer um shell POSIX em / bin / sh. Se você gosta de executar uma chamada de shell POSIX:
PATH='getconf PATH' export PATH
sh
observe que, se isso resultar na execução do bash, não é esperado que o shell seja compatível com POSIX.