Lorsque j'utilise le code ci-dessous dans le terminal Ubuntu, cela fonctionne bien:
rm !(*.sh) -rf
Mais si je place le même code de ligne dans un script shell (clean.sh) et que j'exécute le script shell à partir du terminal, cela génère une erreur:
script clean.sh:
#!/bin/bash
rm !(*.sh) -rf
L'erreur que j'obtiens:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
pouvez-vous aider?
Réponses:
rm !(*.sh)
est uneextglob
syntaxe qui signifie supprimer tous les fichiers sauf ceux qui ont l'.sh
extension.Dans votre
bash
instance interactive , l'option shellextglob
est activée :Maintenant que votre script s'exécute dans un sous-shell, vous devez l'activer
extglob
en l'ajoutant au début du script:Votre script ressemble donc à:
ÉDITER :
Pour supprimer tous les fichiers sauf
.sh
ceux utilisés par l'extensionGLOBIGNORE
(car vous ne voulez pas l'activerextglob
):Exemple :
la source
shopt -s extglob
?Ok, c'est un cross-post, mais je dois écrire une réponse. ;)
Vous pouvez utiliser à la
find
placela source
Vous devez activer
extglob
:la source
man bash
. Il permet un globbing étendu comme!(...)
.shopt -s extglob