Script Bash pour supprimer tous les fichiers et répertoires à l'exception de celles qui sont spécifiques à

Je suis en train d'écrire un très simple shell Bash script qui va cd dans un répertoire spécifique, il va supprimer tous les fichiers et répertoires à l'exception de quelques rares ceux qui sont sélectionnés et ensuite cd d'origine dir.

Mon code est:

#!/bin/bash 
cd /path/to/desired/directory
shopt -s extglob
rm !\(filename1\|filename2\|filename3\) -rf
cd -

J'ai essayé beaucoup de différentes manières d'écrire les symboles '(' et '|', avec des guillemets simples ou doubles ou barre oblique inverse, mais rien n'a fonctionné. Notez que shopt -s extglobet rm !(filename1|filename2) -rf beau travail à l'extérieur d'un script.

Probablement que je suis en train d'accomplir un standard et fondamental bash: erreur de script que je ne peux pas le voir, mais l'expérience est à venir...

Toutes suggestions!?
Merci à l'avance.

Êtes-vous d'obtenir toute sorte d'erreurs?
Êtes-vous sûr que rm !(filename1|filename2) -rf fonctionne bien à l'extérieur d'un script? J'aurais attendu rm -rf !(filename1|filename2) à la place (avec l'option avant le opérandes).
J'ai lu à plusieurs reprises. Je suis également en utilisant les options sur rm après la dépose de temps à autre. Peut-être que c'est un peu incohérent, mais il a toujours travaillé pour moi. @mario, vous n'avez pas à revenir le répertoire avec cd - car un shell interne est exécuté est utilisé lors de l'exécution de votre script.
OK, 'cd' est un détail, peut-être pas nécessaire. Merci de remarquer.
Oui, je suis sûr qu'il fonctionne. Rhe position des options -abc... devrait ne joue aucun rôle.

OriginalL'auteur mario go | 2013-11-05