Risposte:
La soluzione praticamente definitiva quando si tratta di file che non possono essere eliminati con mezzi normali:
ls -il
La prima colonna mostrerà il numero di inode dei file.
find . -inum [inode-number] -exec rm -i {} \;
Ciò eliminerà il file con il numero di inode specificato dopo la verifica.
-deleteinvece di -exec, poi ho capito che stavi usando rm -iquale è una buona idea, quindi sono tornato indietro. Scusate.
Dovresti essere in grado di fare riferimento a quel file come ~/~(senza virgolette) perché l'espansione tilde applica solo la tilde ( ~) all'inizio della parola.
rm ./~, per lo stesso motivo per cui hai detto
./~letteralmente significa "un file o una cartella nominati ~nella directory corrente" . Non ci sono hack come caratteri di escape o riferimenti agli inode.
./~fa. Dopo cinque anni, la mia memoria è un po 'confusa, ma penso sia per questo che ho suggerito ~/~piuttosto che il più normale ./~: la domanda si riferisce specificamente a "un file chiamato ~nella directory home di [OP] "; non "nella directory corrente".
Quota ( rm '~') o scappa ( rm \~).
È sempre uno di quelli (anche per esempio $), oppure aggiungi --per impedire che il nome del file venga interpretato come argomento: rm -- -irimuove il file chiamato -i; utile anche per rm -- *quando si desidera eliminare tutti i file nella directory corrente: non accidentale rm -f *solo perché un file è chiamato così.
--impedisce solo che i seguenti argomenti vengano interpretati come parametri - non impedisce alla shell di eseguire la sua espansione (ad esempio *), che è ciò che sta accadendo qui. (So che l'hai suggerito come alternativa per altre situazioni, ma un avvertimento sarebbe buono.)