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?

scrrr
fonte
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.

Squeezy
fonte
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.

rici
fonte
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.

Daniel Beck
fonte
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