Como você remove um arquivo cujo nome de arquivo começa com um hífen (hífen ou menos) -
? Estou ssh'd em um servidor OSX remoto e tenho este arquivo no meu diretório:
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
Como no mundo posso excluir --help
de uma CLI? Esse problema é algo que, de vez em quando, me deparei com diferentes formas; esses arquivos são fáceis de criar, mas difíceis de se livrar.
Eu tentei usar barra invertida
rm \-\-help
Eu tentei aspas
rm "--help"
Como evito que o caractere de menos (traço ou hífen) seja interpretado como uma opção?
rm --help
realmente explica como excluir nomes de arquivos começando com a-
. boa pergunta, no entanto.Respostas:
Use "-" para fazer com que o rm pare de analisar as opções da linha de comando, assim:
fonte
rm
comando suportam o--
argumento?--
anterior ao GNU (SysIII, 1980) e são padrão / POSIX. Utilitários padrão, exceto por algumas exceções (comoecho
), entendem--
. YMMV para outros comandos se eles não usarem a API getopt () para analisar as opções.Ou você pode fazer
fonte
--
especialmente.-
de utilitários de texto oucd
, ofoo=bar
deawk
...rm -- <filename>
não.Use
find
para fazer isso:E este é um bom método, porque se você tiver mais do que alguns arquivos como esse, poderá excluir uma lista de visualização dos arquivos, simplesmente executando find sem a
-delete
opção primeiro e, em seguida, se a lista de arquivos parecer boa, basta executar novamente com-delete
.De fato, você evitar a
rm
favor defind
(especialmente com a visualização prévia) é um bom hábito que o ajudará a evitar erros erm *
que inevitavelmente o morderá um dia.Observe, porém, que essa localização será repetida em todos os seus subdiretórios, portanto, você pode executá-la com uma restrição de profundidade de subdiretório como esta:
que limita a localização ao diretório atual.
fonte
find
uma lista de arquivos / diretórios para examinar. Entãofind . -name...
.-delete
e-maxdepth
também não são opções padrão.As respostas de Vegar Nilsen e edfuh são muito boas e as soluções adequadas para um problema como esse.
Quero adicionar uma resposta geral a esta pergunta que permita excluir qualquer arquivo com um nome de arquivo difícil. Primeiro, seu número de inode é obtido usando
ls -i
ou alguma forma destat
e, em seguida, o arquivo é removido, pesquisando arquivos no diretório atual pelo número de inode e executando orm
comando no arquivo com um número de inode correspondenteComo os números de inode são exclusivos em cada sistema de arquivos, você pode remover qualquer arquivo usando isso; unicode ou usando caracteres de escape. É como é muito chato digitar, então eu recomendaria adicionar a linha
no seu
.inputrc
arquivo se você estiver usando o bash. Isso permite que você percorra a lista de possíveis conclusões ( para mais informações ).fonte
find -name '--help' -delete
rm --help
, o que ainda não remove o arquivo. Basta usarrm ./--help
(ourm -i *
.find
prefixa o caminho do argumento da linha de comandos para todos os arquivos, para que ele seja executadorm ./--help
erm ./sub/dirs/--help
. Para consertar o segundo, seria preciso acrescentar-maxdepth 1
, mas tudo isso é essencialmente aplicar a solução do @ edfuh de uma maneira mais contundente e complicada e-delete
é mais segura do que-exec rm
qualquer maneira.{}
e\;
, caso contrário, não funcionará.-xdev
. Isso não vai ajudar você a executar issols -i --help
.Uma solução brutal:
fonte
Passo a passo do Linux de criar um arquivo com traços e espaços e removê-lo.
SEJA CUIDADOSO! Não execute acidentalmente um
rm -rf /
comando de exclusão em cascata ou semelhante.Se o arquivo que você está tentando remover incluir asteriscos ou barras, não bombeie acidentalmente um
.
ou/*
ou*
outro curinga que possa causar a exclusão do sistema operacional em cascata.Crie um arquivo chamado "--yo yo"
Primeiro, encontre-o com find:
Certifique-se de que o comando find encontre SOMENTE o arquivo ONE que você deseja excluir:
Em seguida, passe a opção -delete para encontrar e excluí-los:
Aaaannd se foi.
fonte
Midnight Commander (
mc
) é o mais fácil, basta apontar para ele e pressionar F8;)fonte
apt-get install mc || yum install mc; mc
várias teclas de seta e F8 são mais fáceis do querm ./--help
?aqui está uma solução que eu tinha usado antes de encontrar esta discussão.
use
vim
para o diretório 'edit':depois (no vim) selecione seu arquivo, pressione del e confirme a exclusão.
quando terminar, saia do vim com
:q
fonte
Você tentou adicionar o nome do diretório como prefixo:
Usar o diretório como prefixo do arquivo em geral ajuda a evitar a interpretação incorreta do caractere "menos" como uma opção de comando pela função de analisador.
fonte
Se você deseja renomear o arquivo,
-.bar
(mv não funcionará), tente o seguinte:antes de usar o comando:
Você deve poder examinar o conteúdo do arquivo original em foo.bar
fonte