Respostas:
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.
-delete ao invés de -exec, então percebi que você estava usando rm -i o que é uma boa ideia, então retrocedi. Desculpa.
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.
rm ./~, pela mesma razão que você disse
./~ literalmente significa "um arquivo ou pasta chamado ~ no diretório atual " . Não há hacks como caracteres de escape ou referências inode.
./~ 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 ".
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.
-- 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.)