67 votes

Comment faire pour supprimer les fichiers commençant par un double trait d'union?

J'ai quelques fichiers sur ma machine Unix qui commencent par

 --

par exemple, --testings.html

Si j'essaie de le supprimer, je reçois le message d'erreur suivant:

cb0$ rm --testings.html
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
       unlink file

J'ai essayé

rm "--testings.html" || rm '--testings.html'

mais rien ne fonctionne.

Comment puis-je supprimer ces fichiers sur un terminal?

142voto

Steve Jessop Points 166970
rm -- --testings.html

L' -- option indique à rm pour traiter tous les autres arguments que les noms de fichier, et non pas comme des options, même si elles commencent par -.

Ce n'est pas particulier à la commande rm. La fonction getopt la met en œuvre, et de nombreux (tous?) UNIX commandes à traiter de la même façon: -- met fin à l'option de traitement, et rien après c'est une argument.

http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

55voto

lhunath Points 27045
rm -- --somefile

Alors que ça marche, c'est une solution qui s'appuie sur l' rm à l'aide de getopts pour l'analyse de ses options. Il y a des applications qui n'ont leur propre analyse et vomir sur que trop (parce qu'ils pourraient ne pas nécessairement mettre en œuvre le "-- signifie la fin des options" logique).

À cause de cela, la solution vous devez vous rendre par le biais de votre crâne est celui-ci:

rm ./--somefile

Il le sera toujours, car de cette façon, vos arguments ne jamais commencer avec un -.

En outre, si vous essayez de faire vraiment décent scripts shell, vous devez être techniquement de mettre ./ face à tous de votre nom de fichier de paramètre expansions pour éviter que vos scripts à partir de la rupture en raison de funky nom de fichier d'entrée (ou de les empêcher d'être abusé/exploités à faire des choses qu'ils ne sont pas censés faire: par exemple, rm va supprimer les fichiers, mais ignorer les répertoires; tandis que, rm -rf * va tout effacer. Le passage d'un nom de fichier,"-rf" à un script ou à quelqu'un d' touch ~victim/-rf'ing pourrait dans ce cas être utilisé pour modifier son comportement avec de très mauvaises conséquences).

17voto

Vatine Points 8884

Soit rm -- --testings.html ou rm ./--testings.html.

7voto

Juliano Points 13802
rm -- --testings.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X