Cuando uso el siguiente código en el terminal de Ubuntu, funciona bien:
rm !(*.sh) -rf
Pero si coloco el mismo código de línea en un script de shell (clean.sh) y ejecuto el script de shell desde la terminal, arroja un error:
script clean.sh:
#!/bin/bash
rm !(*.sh) -rf
El error que obtengo:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
¿puede usted ayudar?
command-line
bash
scripts
rm
Tal
fuente
fuente

Respuestas:
rm !(*.sh)es unaextglobsintaxis que significa eliminar todos los archivos excepto los que tienen la.shextensión.En su
bashinstancia interactiva , la opción de shellextglobestá activada :Ahora que su script se ejecuta en una subshell, debe habilitarlo
extglobagregando esto al comienzo del script:Entonces su guión se ve así:
EDITAR:
Para eliminar todos los archivos, excepto los de
.shextensión, useGLOBIGNORE(ya que no desea habilitarextglob):Ejemplo:
fuente
shopt -s extglob?Ok, es una publicación cruzada, pero tengo que escribir una respuesta. ;)
Podrías usar
finden su lugarfuente
Necesitas encender
extglob:fuente
man bash. Habilita el globbing extendido como!(...).shopt -s extglob