Oui, rm *.xvg
ne supprimera que les fichiers se terminant par .xvg
votre répertoire actuel. Voici pourquoi.
Lorsque vous tapez une commande comme celle-ci, le travail est divisé entre le shell que vous utilisez (supposons bash) et la commande binaire.
Vous pouvez localiser le binaire en tapant which rm
. Ce petit programme s'occupe de dissocier les fichiers. Des programmes comme celui-ci peuvent être démarrés à partir de la ligne de commande et peuvent lire une liste d'arguments prog arg1 arg2 arg3
au démarrage. Dans le cas de rm
, ils sont interprétés comme une liste de noms de fichiers complets à supprimer. Donc, si vous êtes dans un répertoire contenant le fichier foo.bar
, la saisie delete 'foo.*'
aboutira à rm: foo.*: No such file or directory
. Notez les guillemets simples autour du modèle de fichier, ils disent au shell de transmettre l'argument au shell tel qu'il est.
Toutefois, si vous tapez rm *.bar
dans le même répertoire, le fichier sera supprimé. Ce qui se passe ici, c'est que votre shell, qui est le programme que vous utilisez pour taper des commandes, effectue certaines transformations avant de transmettre les arguments à la commande. L'un d'eux s'appelle 'extension de nom de fichier', autrement dit 'globbing'. Vous pouvez voir une liste des extensions de noms de fichiers bash ici . L’une des extensions les plus courantes est celle *
qui est étendue aux noms de fichiers du répertoire en cours.
Un moyen simple de voir les globes au travail est d'utiliser echo
, qui affiche tous les arguments qui lui sont transmis via le shell. Donc, en tapant echo *
dans le même répertoire va sortir foo.bar
. Ainsi, lorsque vous tapez rm *.bar
, le shell étend la liste des arguments foo.bar
, puis le transmet à la rm
commande.
Il y a des moyens de contrôler le globbing. Dans les versions récentes de bash, par exemple, vous pouvez activer une option appelée globstar qui effectuera une expansion récursive. En tapant, vous echo **/*.bar
verrez une liste de tous les fichiers se terminant .bar
par tous les sous-dossiers. Donc, en tapant rm **/*.bar
dans globstar enabled bash supprimera effectivement de manière récursive tous les fichiers correspondants dans les sous-dossiers.
rm -f {*.xvg,.*.xvg}
supprimer aussi les fichiers cachés. Etrm -R -f {*.xvg,.*.xvg}
pour supprimer aussi les répertoires.