eu tentei
rm -- -
rm "-"
rm "\-"
rm \-
Deu uma chance a Perl
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `rm $junk`;'
-
rm: cannot remove `-': No such file or directory
...e...
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `mv $junk newfile.garbage`;'
-
mv: cannot stat `-': No such file or directory
Qualquer ajuda seria muito apreciada, pessoas sábias.
rm
versão você está usando (rm --version
)?rm -
funciona bem com o GNU coreutils 8.5.rm ./-
Respostas:
Isso costumava ser publicado nas perguntas frequentes da Usenet para Unix - vejo que está nas perguntas frequentes do GNU Core Utility . Havia pelo menos cinco métodos diferentes, mas isso funciona bem:
Se um nome de arquivo contiver caracteres não tipáveis, use:
A
-i
bandeira pede confirmação para cada arquivo se ele deve ser removido ou não.fonte
A remoção de um arquivo cujos nomes começam
-
é uma FAQ, mas parece que você tem um problema diferente.Das soluções que você mencionou na pergunta:
Isso deve funcionar.
Isso não é diferente de
rm -
. As aspas são removidas pelo shell, e orm
comando apenas vê o hífen único como argumento. As aspas são úteis para escapar dos metacaracteres do shell; o hífen é especial pararm
, não para o shell.As aspas escapam da barra invertida; portanto, isso tenta remover um arquivo cujo nome consiste em dois caracteres, uma barra invertida e um hífen.
Isto é como
rm "-"
, equivalente arm -
.Por acaso, pelo menos com a versão GNU coreutils
rm
,rm -
na verdade remove (ou tenta remover) um arquivo cujo nome consiste apenas em um hífen. Se seu arquivo tivesse esse nome, ele já estaria esgotado. Concluo que seu arquivo tem um nome que se parece apenas com um hífen.deve dar uma idéia do que realmente é chamado.
Aqui está um script Perl que acabei de juntar que solicitará cada arquivo no diretório atual e perguntará se deseja removê-lo. Oferecido sem garantia, mas eu o testei brevemente.
EDIT : Uma solução menos elaborada: se o nome do arquivo for apenas um caractere,
rm ?
remova-o (junto com outros arquivos).fonte
M-bM-^@M-^S
é uma representação da representação UTF-8 de 3 bytes do caractere Unicode "EN DASH", 0x2013. Gostaria de saber se você acidentalmente copiou e colou de uma página da web.rm -i *
não funcionar? Parece que faria a mesma coisa que o script perl./^y/i
preferiria/y/i
. Afinal, um usuário russo pode digitar "Nyet".Se você quer algo mais seguro ...
Tente usar uma combinação de ls e find (isso funciona para qualquer arquivo que você tenha permissão para remover)
O parâmetro '-i' fornecerá o número do inode para cada entrada de diretório ls -li
Depois de ter o número do inode ...
fonte
-exec rm -i {}
é-i
solicitar a remoção. Estou olhandoman find
e não vejo nenhuma maneira de fazer isso.Dê
rm ./-
uma chance.O
-
sinalizador é para iniciar um argumento de sinalizador. Se você iniciar o argumento com qualquer coisa, exceto a-
, nesse caso/
, ele assumirá que é o nome do arquivo. Qual é o que você deseja.E já que
file
e./file
são o mesmo arquivo, ele terá como alvo o arquivo nomeado-
via./-
.fonte
Não é tão nerd quanto a maioria das outras respostas, mas eu acionava uma instância de
mc
comandante da meia-noite e apenas selecionava e excluía o arquivo.fonte
Experimentar:
para ver se o nome do arquivo possui caracteres não imprimíveis.
fonte
Não que seja necessário usar o perl aqui, mas isso deve funcionar:
ou para ver qual pode ser o erro acima:
fonte
Eu tive sorte usando o Nautilus do GNOME para remover arquivos mal nomeados. Você está executando um servidor X? Tenho certeza de que outros navegadores de arquivos também funcionarão.
fonte
E se
não funcionou, o nome do arquivo não é "apenas um hífen". Se nenhum outro arquivo tiver um hífen, tente tentar
fonte
Até agora, recebo um "Nenhum arquivo ou diretório" para todos os métodos publicados até agora:
Parece que eu tenho a versão 7.4 do rm. Vou tentar atualizar e tentar novamente essas sugestões. Obrigado a todos por ajudar.
fonte
Eu gosto muito de usar o
dired
modo no emacs para esse tipo de coisa - basta "abrir" o diretório no emacs. Você pode facilmente selecionar arquivos e marcá-los para exclusão.Outro pôster sugeriu o uso do comandante da meia-noite; essa é praticamente a mesma idéia, mas se você já é usuário do emacs, talvez seja mais conveniente.
fonte
Deve ser capaz de
rm -f '-'
trabalhar para mim no cygwinPor falar nisso,
rm -
também parece funcionar no red hat.fonte
rm -
funciona para mim também.