¿Cómo eliminar un archivo con un nombre extraño?

33

Escribí un programa que usa la función de mapeo de memoria POSIX ( mmap)

El programa toma un archivo ( a.dat) y lo mapea en memoria para leer / escribir.

Debido a errores en el programa, cada vez que ejecuto el programa ?d?P?^z??d?P?^z?se crea un archivo con algunos nombres extraños (por ejemplo, ). El error se resuelve pero no puedo eliminar los archivos.

No puedo eliminarlo usando la línea de comando o seleccionando / eliminando desde el administrador de ventanas.

Entonces, ¿cómo debo eliminarlo? Estoy usando Ubuntu 11.04.

Alaska
fuente
1
Incluso si no puede escribir fácilmente el nombre de archivo, eliminarlo de un administrador de archivos gráfico debería funcionar bien. ¿Qué error estás recibiendo?
Thomas
2
@Aditya, no tengo problemas para eliminar dichos archivos de la línea de comandos cuando escapo sus nombres con comillas simples ( rm '?d?P?^z??d?P?^z?'). ¿Intentaste eso?
Frédéric Hamidi
eliminar del administrador de ventanas gráfico simplemente dice que no se puede eliminar el archivo 'nombre de archivo'. @ Frédéric Hamidi Gracias por ayudarme a eliminar un archivo. Pero el otro con el nombre '? M? P ???)? M? P ???)' no se elimina ... El mensaje de error dice "rm: no se puede eliminar`? M? P ???)? M ? P ???) ': No existe tal archivo o directorio "
AK
1
@Aditya, ese otro archivo debe tener caracteres no imprimibles en su nombre. Pruebe los siguientes pasos: 1 / Mueva todos los archivos válidos fuera de esa carpeta, 2 / Problema rm *dentro de la carpeta.
Frédéric Hamidi
1
Al escribir el nombre del archivo, intente comenzar con comillas, luego use la finalización automática tan pronto como funcione (después de uno o dos caracteres). La finalización automática sería presionar la tecla [tab] para que el shell complete automáticamente el nombre. De esta manera, podría tener más éxito para escapar correctamente de los nombres.

Respuestas:

45

rm -i -- *le pedirá que elimine cada archivo. Puede y debe cambiar '*' a una coincidencia más estrecha si hay muchos archivos. El --paradas opciones de proceso, por lo que un archivo con el nombre -dserá eliminado por el rméxito.

Lo he usado en el pasado y funciona hasta que golpeas un personaje especial o 2 que no le gusta.

JimR
fuente
1
Esto no funciona para un archivo llamado -d, por ejemplo.
SCO
2
@SCO Si no funciona para usted y, dependiendo de su versión de rm, puede hacerlo. rm -i -- * Le --dice a algunas versiones de rm que no hay más cambios de línea de línea de comando después de --y para tratar otros argumentos como nombres de archivo.
JimR
1
Creo que esta respuesta debería incluir el comentario sugerido por @JimR: Uso --en el rmcomando.
Felipe Alvarez el
16

puede usar ls -lipara mostrar todos los archivos por su inodo. Luego ejecute este comando para eliminar el archivo:

find . -inum ${INODE_NUM} -delete

Agregué -maxdepth 1a mi hallazgo solo para estar seguro:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
Felipe Alvarez
fuente
1
Estrictamente hablando, ls -ies lo suficientemente bueno.
Scott
lsno elimina archivos OP quiere esto.
Felipe Alvarez
44
La primera línea de su respuesta dice: "puede usar ls -lipara mostrar todos los archivos por su inodo". Estoy señalando que ls -ies lo suficientemente bueno como para obtener una lista de nombres de archivo y sus correspondientes números de inodo. (Pero, por supuesto, necesita ls -iasi desea incluir archivos de puntos).
Scott
Es mejor simplemente pasar la -deleteopción a find, para minimizar el uso del nombre de archivo incorrecto.
ScumCoder