Question Quelle commande dois-je utiliser pour supprimer un fichier appelé `-rf`?


J'ai fait quelque chose de fou à un moment donné qui a créé un fichier appelé -rf sur mon système de fichiers.
Maintenant je ne peux pas comprendre comment le supprimer ...

J'ai essayé:

rm "-rf"
rm \-rf

Celles-ci sortent tout de suite, arrgh!

Quelqu'un sait comment supprimer ce fichier? De préférence sans nettoyer accidentellement tout mon dossier.


67
2017-10-05 22:06


origine


Certains nerfs essayant de rm un fichier appelé -rf de votre système sans se souvenir de la syntaxe exacte! - ChristopheD
Pour expliquer pourquoi ceux-ci ne fonctionnent pas: les guillemets et les échappements sont analysés par votre shell (généralement bash), puis le résultat de l'analyse est transmis à rm (dans son argc et argv) Ainsi, les deux résultent dans le tableau ["rm", "-rf"] être passé à rm, qui fait ce que vous attendez - Thanatos
Je pense que cela est plus proche d'une copie de celle-ci de Unix et Linux stackexchange: unix.stackexchange.com/questions/1519/... - frabjous
Un vieux gag est d'obtenir un fichier nommé * dans un dossier. Inclure un nommé -rf et aussi regarder le fun ;-) - RBerteig
@RBerteig: mkdir './-rf ' (ls --classify, un défaut commun dans un alias de shell, ajoutera un /)


Réponses:


unlink -rf

Ou

rm -- -rf

125
2017-10-05 22:07



C’est la solution la plus utile pour apprendre l’IMO, car «-» pour arrêter le traitement des arguments est standardisé entre les outils GNU. - Nathan O'Sullivan
Pour être plus précis, tout ce qui utilise GNOU getopt a --, ce qui devrait signifier la plupart des outils linux modernes. - Geoffrey Zheng


Une autre option:

rm ./-rf

... le répertoire actuel est celui où réside le fichier.


59
2017-10-05 22:10





Sinon, vous pouvez toujours modifier le répertoire et supprimer le fichier.

vim .

puis supprimez simplement la ligne contenant le fichier (en utilisant D, dd ne fonctionnera pas).


34
2017-10-05 22:36



Joli tour! [Plusieurs caractères inutiles] - Sergio Acosta
Je ne pensais pas que cela méritait les restrictions imposées quand j'ai vu cette réponse pour la première fois cet après-midi, mais je n'ai pas eu la chance d'aller vérifier que vim avait un mode dired. Clairement, éditer le répertoire lui-même dans un texte l'éditeur n'est ni recommandé, ni possible sans un véritable saut de cerceau expert. Notez que emacs travaillerait aussi, et pour la même raison. - RBerteig
Des points supplémentaires pour une utilisation intelligente de Vim! :) - Pierre-Antoine LaFayette
bon à savoir ;) - schöppi


Une technique générique pour supprimer les noms de fichiers étranges est à utiliser.

 ls -li

pour trouver le numéro d'inode du fichier et ensuite l'utiliser.

find ./ -inum <number of file> -delete

Pas besoin de se souvenir de tous les cas particuliers.


25
2017-10-05 22:48



Ne savait pas find eu le pouvoir de supprimer des fichiers. - zneak
Ceci est également idéal pour attraper des fichiers avec des noms inconnus (en commençant ou en incluant des caractères de retour arrière ou en ajoutant des espaces à la fin), à condition que vous ayez accès à une découverte GNU correcte sur votre boîte. - Olfan


Même si je connais le truc "rm -filename", généralement quand je reçois un fichier avec un nom - en son nom que je veux supprimer, je lance un gestionnaire de fichiers GUI et je le fais pour éliminer le risque des erreurs.


17
2017-10-05 22:13



Il se peut qu’il n’ait pas d’interface graphique du tout, alors cela pourrait ne pas fonctionner. - Wuffers
Si c'était stupide et faux, peut-être mériterait-il une décote, mais je ne crois pas à voter cette réponse simplement parce qu'elle «pourrait ne pas fonctionner». Aucun mal ne peut venir de cette suggestion. - JT.WK
Il y a toujours le commandant de minuit (ou d'autres gestionnaires de fichiers basés sur des malédictions) pour ceux sans X. - thomasrutter


Si vous voulez juste être sûr:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

9
2017-10-06 07:53





Juste au cas où vous êtes sur un Unix non-GNU où vous vous sentez renvoyé à l'âge de pierre (non -- syntaxe, non -inum switch to find, pas de commande unlink, votre éditeur refuse les répertoires d'édition etc. etc.) vous pouvez toujours vous aider:

find . -name '-rf' -print | xargs rm -i

Cela amènera find à alimenter tous les candidats potentiels à rm, qui à son tour demanderont la permission / le refus pour chaque fichier alimenté.

Au cas où votre rm ne supporte même pas le -i switch (HP-UX 10.2 sur PA-RISC 1.1, n'importe qui?), faites juste attention:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

4
2017-10-06 10:16



et si votre système n'a même pas find? - Lie Ryan
Ce serait vraiment mal. Hélas, je n'ai pas encore rencontré une installation Unix sans un. Pouvez-vous me donner un pointeur? - Olfan
En y réfléchissant, ma réponse aurait été plus appropriée si la question était posée sur serverfault. Il est peu probable que les super-utilisateurs aient des machines aussi anciennes que celles dont je parle. Et ceux qui le feront auront appris à s’aider eux-mêmes. ;-) - Olfan
+1, @Olfan, dans votre défense, quelqu'un qui vient de rencontrer un unix hérité dans un placard quelque part a toujours besoin d'une ressource pour apprendre des trucs et astuces de ... - RBerteig


Justificatif la réponse de jleedev, Je m'améliorer avec:

rm -i -- -rf

être en mode interactif et demander une confirmation afin que vous puissiez vraiment être sûr de ce que vous supprimez. (bien que la solution soit satisfaisante, c'est simplement pour votre tranquillité d'esprit)

En fait, même utiliser cela:

\rm -i -- -rf

pour être sûr de ne pas utiliser d’alias.


3
2017-10-06 11:10