Es importante comprender que este no es el tipo de "corrupción del sistema de archivos" que fsck
ayudará. En lo que respecta al sistema de archivos, los nombres de archivo pueden ser cualquier secuencia de bytes , siempre que ningún byte tenga el valor 0x00 (ASCII NUL, marcador de fin de cadena C) o 0x2F ( /
, el separador de directorio). (Si un nombre de archivo de alguna manera obtiene un byte 00 o 2F incrustado en él, fsck
debería solucionarlo).
Más bien, lo que tiene son nombres de archivos que el software de la aplicación (Dolphin ls
) cree que contienen caracteres que no se pueden mostrar en su "ubicación", por lo que los reemplaza con caracteres de marcador de posición. Tampoco puede escribir esos caracteres, por lo que manipular los archivos es más difícil, pero puede hacerlo siempre que lo haga sin tener que escribir o copiar y pegar el nombre. Por ejemplo, si elimina o cambia el nombre de los archivos del problema directamente desde Dolphin, eso debería funcionar (diría que si no funciona, eso es un error en Dolphin).
Si necesita hacer algo al respecto desde el shell (por ejemplo, si son propiedad de root
un programa GUI y, por lo tanto, no pueden ser modificados), puede nombrarlos indirectamente utilizando patrones "glob", que se expandirán a la secuencia correcta (s) de bytes y transmitidos.
Ahora, por supuesto, no querrás eliminar cosas por accidente porque tu patrón global coincide demasiado, por lo que mi recomendación sería usar la rename
utilidad Perl para convertir cada nombre de archivo a su codificación hexadecimal:
$ rename '$_ = unpack("H*", $_)' *
Esto no destruye ninguna información, ni el archivo en sí mismo, ni el significado que originalmente se haya codificado en el nombre de archivo antes de que fuera destruido. Se puede deshacer para archivos específicos con, por ejemplo,
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Precaución: hay dos programas nombrados rename
, de diferentes orígenes; los comandos anteriores solo funcionarán con el que se originó con Perl. En Ubuntu, el que desea es el del paquete "rename", no el del paquete "util-linux". rename -h
distinguirá: esto es lo que quieres ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... Esto no es lo que quieres ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
La clave para buscar es "perlexpr". Es posible que tenga una versión anterior del cambio de nombre de Perl que no comprende todas las opciones anteriores, pero el comando que mostré debería funcionar.
Editar: en 14.04 .5, el script perl que se incluye rename
no admite el modificador -h. Puede confirmar que tiene la correcta marcando su página de manual, man rename
en cuyo caso la línea superior contendrá:
RENAME (1) Guía de referencia de programadores de Perl RENAME (1)