eliminar o cambiar el nombre de un archivo con \ r como nombre de archivo

10

Tengo un pequeño archivo molesto cuyo nombre parece ser un solo carácter, y ese personaje es un \r

¿Cómo puedo borrar esto?

Esto es lo que obtengo con ls -bl:

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r

ls -l solo muéstralo "?"

Colin
fuente
¿Cómo terminaste con un archivo llamado así?
mkaito

Respuestas:

16

Usamos ls -lipara obtener el número de inodo para el archivo (primera columna), luego lo usamos findpara eliminarlo (asumiendo que inode es 12345):

find . -inum 12345 -exec rm -i {} \;

Garrett
fuente
Gracias, esto es extremadamente útil. Sentí que debía haber algún tipo de referencia inequívoca del sistema al archivo, pero no pude encontrarlo (rápidamente de todos modos).
Colin
1
Dependiendo de la versión de findinstalado, también podría hacerlofind . -inum 12345 -delete
William Jackson
Para mí, cuanto más independiente de la versión sea, mejor. Pero buena sugerencia no obstante. :)
Garrett
5

Yo personalmente alcanzaría Python:

>>> import os
>>> '\r' in os.listdir('.')
True
>>> os.unlink('\r')

Pero también puede hacerlo desde el shell si entiende los caracteres de escape.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r
Josh Lee
fuente
¿Supongo que también tienes un mazo en tu cocina? ¿Solo en caso de que necesites romper una nuez? :-)
mivk
3

Otra forma rápida de eliminar un archivo llamado <carriage return>si está utilizando el shell Bash es:

$ rm <control-v><control-m>
S2VpdGgA
fuente
2

Los nombres de archivo de un solo carácter son inusuales, y si no tiene ninguno de esos archivos en su directorio, puede intentar esto:

rm ?

Soy demasiado vago para aprender o buscar cómo citar caracteres extraños, así que he usado variantes de esto varias veces cuando estaba atrapado con archivos con nombres difíciles.

Thomas Padron-McCarthy
fuente
-1 Esto coincide con todos los archivos con un solo nombre de carácter: consulte "Expansión del nombre de ruta" en man bash. Pruebatouch a b c d $'\r'; rm ?
l0b0
1
@ l0b0: ¿Sí? Como escribí, los nombres de archivo de un solo carácter son inusuales. Es bastante probable que no haya otros archivos en el directorio, y en ese caso, esto funciona. De lo contrario "rm -i?" puede ser usado.
Thomas Padron-McCarthy