Tenha um arquivo chamado ~ (til) no meu diretório home


46

Eu só notei que eu tenho um arquivo chamado ~ no meu ~ -diretório.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Qualquer ideia de como eu posso mv ou rm isto?


Tente excluí-lo pelo i-node.
gronostaj

Respostas:


55

A melhor solução final quando se trata de arquivos que não podem ser excluídos por meios normais:

ls -il 

A primeira coluna mostrará o número de inode dos arquivos.

find . -inum [inode-number] -exec rm -i {} \;

Isso excluirá o arquivo com o número de inode especificado após a verificação.


Isso funcionou. Talvez a solução do rici também seja boa, mas não tentei. Muito obrigado!
scrrr

Sim, a resposta de rici também é boa. E eu acho que é melhor porque é mais simples.
Andrey Regentov

bom, +1. Eu mudei sua resposta para usar -delete ao invés de -exec, então percebi que você estava usando rm -i o que é uma boa ideia, então retrocedi. Desculpa.
terdon

Não se preocupe. Sempre feliz quando alguém considera minhas respostas dignas de seu tempo :)
Squeezy

Esta resposta não funcionou para mim. Ubuntu 14.04 LTS
Rexford

45

Você deve poder se referir a esse arquivo como ~/~ (sem aspas) porque a expansão de til só aplica o til ( ~ ) no início da palavra.


16
também, indo para a pasta e rm ./~, pela mesma razão que você disse
Carlos Campderrós

@ CarlosCampderrós considere fazer isso uma resposta. Eu consideraria isso como a "melhor" e mais simples solução, em comparação com outras respostas desde ./~ literalmente significa "um arquivo ou pasta chamado ~ no diretório atual " . Não há hacks como caracteres de escape ou referências inode.
ADTC

@ ADTC: em defesa da minha resposta, não é necessário alterar a CWD, enquanto usar ./~ faz. Depois de cinco anos, minha memória é um pouco confusa, mas eu acho que é por isso que eu sugeri ~/~ ao invés do mais normal ./~: A questão refere-se especificamente a "um arquivo chamado ~ em [OP's] diretório home "; não" no diretório atual ".
rici

@rici Isso faz sentido e, no contexto da questão, seria apropriado. Mas eu gosto de ver respostas que são gerais, ou falar geralmente primeiro antes de expor mais ao caso específico da questão. Essa é a minha defesa: D
ADTC

20

Cite isso rm '~' ) ou fugir dele ( rm \~ ).


É sempre um desses (também para p. Ex. $ ) ou adicione -- para evitar que o nome do arquivo seja interpretado como argumento: rm -- -i remove o arquivo chamado -i; também é útil para rm -- * quando você deseja excluir todos os arquivos no diretório atual: Não acidental rm -f * só porque um arquivo é chamado assim.


Hm, não parece que não funciona .. Eu tentei as citações simples, os escapes e backticks .. ele não pega o arquivo. Diz que não existe ou interpreta ~ como o diretório de origem.
scrrr

@scrrr Qual é o seu shell?
Daniel Beck

bater. Mas o problema resolveu o caminho do inode.
scrrr

@scrrr Ainda bem que o seu problema está resolvido, mas agora eu quero saber porque o bash escapes não funciona da mesma maneira no seu sistema como no meu.
Isaac Rabinovitch

1
Cuidado. -- apenas impede que os seguintes argumentos sejam interpretados como parâmetros - não impede que o shell execute sua expansão (por exemplo, * ), que é o que está acontecendo aqui. (Eu sei que você sugeriu isso como uma alternativa para outras situações, mas um aviso seria bom.)
Bob
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.