La globulisation se fera de la même manière à chaque fois, si le contenu du répertoire est le même à ces deux moments différents.
Si vous voulez vraiment vérifier ce qui sera supprimé, utilisez rm -i *.txt
. Il vous demandera séparément pour chaque fichier avant de le supprimer (d'essayer de le supprimer).
Ceci est garanti sûr contre les conditions de concurrence :
ls *.txt
/ un nouveau fichier est créé / rm *.txt
car vous êtes invité pour chaque fichier par le même programme qui effectue la suppression.
C'est trop encombrant pour un usage normal, et si vous alias rm
à rm -i
, vous vous retrouverez à utiliser \rm
ou rm -f
assez souvent. Cependant, il vaut au moins la peine de mentionner qu'il existe une solution à la condition de concurrence. (Elle est même portable sur des systèmes non-GNU : POSIX rm(1)
spécifie l'option -i
.)
Une autre option serait un tableau bash : to_remove=(*.txt)
, puis demander à l'utilisateur de confirmer (peut-être après avoir fait ls -ld -- "${to_remove[@]}"
), puis rm -- "${to_remove[@]}"
. Ainsi, l'expansion globale n'est faite qu'une seule fois, et la liste est transmise textuellement à rm
.
Une autre option pratiquement utilisable est GNU rm -I
(page de manuel), qui demande confirmation si plus de 4 éléments sont supprimés. (Mais ne vous montre pas la liste, juste le total.) J'utilise alias rm='rm -I'
sur mon bureau.
C'est une belle protection contre les erreurs de frappe en appuyant sur Entrée avec un motif à moitié tapé qui correspond à trop de choses. Mais l'utilisation de ls
d'abord est généralement bonne dans un répertoire que vous possédez, ou sur un système monoutilisateur, et lorsqu'il n'y a pas de processus en arrière-plan qui pourraient créer de nouveaux fichiers de manière asynchrone. Pour vous prémunir contre les erreurs de frappe, ne tapez pas rm -rf /foo/bar/baz
de gauche à droite. rm -rf /
est un cas spécial, mais rm -rf /usr
ne l'est pas ! Omettez la partie -rf
, ou commencez par ls
, et n'ajoutez la partie rm -rf
qu'après avoir tapé le chemin.