Comment supprimer un fichier avec ce nom sur linux: -] ??????? q [duplicate]

14

D'une manière ou d'une autre, un fichier nommé a -]???????qété créé sur mon terminal. J'ai essayé rm -f "-] ??????? q" (entre guillemets), mais il n'a pas été supprimé. (Erreur ::) rm: invalid option -- ]. Comment puis-je le supprimer?

djsmiley2k TMW
la source
J'ai eu un problème similaire, dans mon cas, le problème était avec la mise en œuvre de samba, essayez simplement de ssh sur le serveur, puis supprimez-le
Buksy

Réponses:

26

Par exemple, avec:

rm -- '-]???????q'

--signifie: "arrêter l'analyse des options".

cYrus
la source
En effet, j'ai rencontré un problème similaire auquel je ne pensais même pas - être un commutateur. Je jure que j'ai passé environ 2 heures à essayer de le comprendre.
Jeff F.
De nombreuses applications utilisent --, je suppose que c'est une sorte de standard de facto en raison de la getoptfonction.
cYrus
13

Vous pouvez utiliser le nom de fichier avec rm ou le numéro d'inode avec find comme:

rm -- -]???????q
# or
  -> ls -i                                                                                                                         
47984689 blah.ui  47983771 __init__.py  
47983773 testpy.e4p  47985161 Ui_blah.py

  -> find -inum 47983773                                                                                                           
./testpy.e4p

  -> find -maxdepth 1 -inum 47983773 -exec rm -i '{}' \;
#or
  -> find -maxdepth 1 -inum 47983773 -delete
OneOfOne
la source
Ajoutez -maxdepth 1 sinon find itérera dans tous les sous-répertoires:find -maxdepth 1 -inum 47983773 -delete
Fabian Ritzmann
@FabianRitzmann bon appel, je l'ai ajouté.
OneOfOne
1
Ce devrait être la réponse choisie. L'accès au fichier avec des caractères non valides dans son nom par son iNode est le seul moyen correct.
ScumCoder
1
rm ./"-]???????q"

Les guillemets doubles empêchent le shell d'étendre les marques d'interrogation. Par exemple, si vous aviez un autre fichier appelé -] foobar.q :

$ touch ./"-]???????q" ./-]foobar.q
$ echo ./-]???????q
./-]foobar.q ./-]???????q
marco
la source
Oh. J'ai mis les guillemets, mais il ./