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.
-delete
invece di -exec
, poi ho capito che stavi usando rm -i
quale è 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 -- -i
rimuove 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.)