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 unaextglob
sintaxis que significa eliminar todos los archivos excepto los que tienen la.sh
extensión.En su
bash
instancia interactiva , la opción de shellextglob
está activada :Ahora que su script se ejecuta en una subshell, debe habilitarlo
extglob
agregando esto al comienzo del script:Entonces su guión se ve así:
EDITAR:
Para eliminar todos los archivos, excepto los de
.sh
extensió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
find
en su lugarfuente
Necesitas encender
extglob
:fuente
man bash
. Habilita el globbing extendido como!(...)
.shopt -s extglob