Como excluir um arquivo com este nome no linux: -] ??????? q [duplicar]

14

De alguma forma, um arquivo chamado -]???????qfoi criado no meu terminal. Eu tentei rm -f "-] ??????? q" (entre aspas duplas), mas não foi excluído. (Erro ::) rm: invalid option -- ]. Como eu o apago?

djsmiley2k na escuridão
fonte
Eu tive problema semelhante, no meu caso o problema era com a implementação samba, apenas tentar ssh para o servidor e, em seguida, removê-lo
Buksy

Respostas:

26

Por exemplo, com:

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

Onde --significa: "pare de analisar as opções".

cYrus
fonte
Na verdade, eu tive um problema semelhante nem mesmo pensando em - ser um interruptor. Juro que passei duas horas tentando descobrir.
Jeff F.
Muitos aplicativos usam --, acho que é um tipo de padrão de fato devido à getoptfunção.
CYrus
13

Você pode usar o nome do arquivo com rm ou o número do inode com find como:

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
fonte
Adicionar -maxdepth 1 caso contrário encontrar irá percorrer todos os subdiretórios:find -maxdepth 1 -inum 47983773 -delete
Fabian Ritzmann
@FabianRitzmann boa ligação, eu adicionei.
OneOfOne 29/07
1
Essa deve ser a resposta escolhida. Acessar arquivo com caracteres inválidos em seu nome pelo seu iNode é a única maneira correta.
ScumCoder
1
rm ./"-]???????q"

Aspas duplas impedem que o shell expanda marcas de interrogação. Por exemplo, se você tivesse outro arquivo chamado -] foobar.q :

$ touch ./"-]???????q" ./-]foobar.q
$ echo ./-]???????q
./-]foobar.q ./-]???????q
marco
fonte
Oh Eu coloquei as aspas, mas estava faltando o./