J'ai plusieurs fichiers avec le même nom de fichier de base. Je voudrais supprimer tous sauf un
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Si je n'avais pas besoin d'en garder un, je sais que je pourrais en utiliser rm foo.*
.
TLDP montre comment^
annuler une correspondance. Par essais et erreurs, j'ai pu constater que
rm foo.*[^org]
fait ce dont j'ai besoin, mais je ne comprends pas vraiment la syntaxe.
De plus, bien que ce ne soit pas une limitation dans mon cas d'utilisation, je pense que ce modèle ignore également foo.o
et foo.or
. Comment fonctionne ce modèle et à quoi ressemblerait un glob qui ignore tout simplement foo.org
?
Regular Expression
. Vous devriez faire attention avec vos caractères de regroupement. En utilisant des crochets, vous avez spécifié une classe de caractères, ce qui signifie que vous supprimeriez tous les fichiers ayant une extension avec les lettres o
, r
ou g
dans n'importe quel ordre. Utilisez des parenthèses pour créer un groupe et conserver l’ordre des caractères.
foo.*[^org]
correspond à tout nom de fichier commençant par foo.
un ou plusieurs caractères après le point où le dernier caractère n'est pas o, r ou g. Donc, cela correspondrait foo.orb
, mais pas foo.org
ou foo.or
ou foo.o
. La réponse de GlennJackman montre comment activer les fonctionnalités de correspondance de modèle étendue pour annuler une correspondance.
rm foo.*[^org]
supprime tous les fichiers dont le dernier caractère n'est ni l'un ni l'autreo
,r
et ne correspondg
doncfoo.foo
pas non plus.