Come eliminare un file con un nome strano?


33

Ho scritto un programma che utilizza la funzione di mappatura della memoria POSIX ( mmap)

Il programma prende un file ( a.dat) e lo mappa in memoria per la lettura / scrittura.

A causa di errori nel programma, ogni volta che eseguo il programma ?d?P?^z??d?P?^z?viene creato un file con alcuni nomi strani (ad esempio, ). L'errore è stato risolto ma non sono in grado di eliminare i file.

Non sono in grado di eliminarlo tramite la riga di comando o selezionando / eliminando dal gestore delle finestre.

Quindi, come dovrei eliminarlo? Sto usando Ubuntu 11.04.


1
Anche se non è possibile digitare facilmente il nome file, eliminarlo da un file manager grafico dovrebbe funzionare correttamente. Che errore stai ricevendo?
Thomas,

2
@Aditya, non ho problemi a cancellare tali file dalla riga di comando quando sfuggo ai loro nomi con virgolette singole ( rm '?d?P?^z??d?P?^z?'). Ci hai provato?
Frédéric Hamidi,

l'eliminazione dal gestore di finestre grafiche dice semplicemente che non è possibile eliminare il file "nomefile". @ Frédéric Hamidi Grazie per avermi aiutato a eliminare un file. Ma l'altro con il nome '? M? P ???)? M? P ???)' non viene cancellato ... Il messaggio di errore dice "rm: impossibile rimuovere`? M? P ???)? M ? P ???) ': Nessun file o directory "
AK,

1
@Aditya, quell'altro file deve avere caratteri non stampabili nel suo nome. Prova i seguenti passi: 1 / Sposta tutti i file validi da quella cartella, 2 / Problema rm *all'interno della cartella.
Frédéric Hamidi,

1
Quando si digita il nome del file, provare a iniziare con le virgolette, quindi utilizzare il completamento automatico non appena funziona (dopo uno o due caratteri). Il completamento automatico dovrebbe premere il tasto [tab] per fare in modo che la shell completi automaticamente il nome. In questo modo potresti avere più successo per sfuggire correttamente ai nomi.

Risposte:


45

rm -i -- *ti chiederà di eliminare ogni file. Puoi e dovresti cambiare '*' in una corrispondenza più stretta se ci sono molti file. Le --opzioni di elaborazione si interrompono, quindi un file denominato -dverrà rimosso rmcorrettamente.

L'ho usato in passato e funziona fino a quando non colpisci un personaggio speciale o 2 che non gli piace.


1
Questo non funziona per un file chiamato -d ad esempio.
SCO

2
@SCO Se non funziona per te e in base alla tua versione di rm, puoi fare rm -i -- * The --dice ad alcune versioni di rm che non ci sono più opzioni da riga di comando dopo --e per trattare ulteriori argomenti come nomi di file.
JimR,

1
Penso che questa risposta dovrebbe includere il commento suggerito da @JimR: Uso --nel rmcomando.
Felipe Alvarez,

16

puoi usare ls -liper mostrare tutti i file in base al loro inode. Quindi eseguire questo comando per rimuovere il file:

find . -inum ${INODE_NUM} -delete

Ho aggiunto -maxdepth 1alla mia ricerca solo per sicurezza:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
A rigor di termini, ls -iè abbastanza buono.
Scott,

lsnon elimina i file. OP lo vuole.
Felipe Alvarez,

4
La prima riga della tua risposta dice: "puoi usare ls -liper mostrare tutti i file in base al loro inode". Sto sottolineando che ls -iè abbastanza buono per ottenere un elenco di nomi di file e i loro corrispondenti numeri di inode. (Ma ovviamente è necessario ls -iase si desidera includere file dot.)
Scott

È meglio semplicemente passare l' -deleteopzione a find, al fine di ridurre al minimo l'utilizzo del nome file errato.
ScumCoder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.