Tengo un montón de directorios y subdirectorios que contienen archivos con caracteres especiales, como este archivo:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Find revela una secuencia de escape:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
La única razón por la que incluso puedo escribir sus nombres en la consola es porque se completó la pestaña. Esto también significa que puedo cambiarles el nombre manualmente (y quitarle el carácter especial).
He configurado LC_ALL en UTF-8, lo que no parece ayudar (tampoco en un nuevo shell):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Me estoy conectando a la máquina usando ssh desde mi mac. Es una instalación de Ubuntu:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Shell es Bash, TERM se establece en xterm-color.
Estos archivos han estado allí durante bastante tiempo y no se han creado con esa instalación de Ubuntu. Así que no sé cuál era la configuración de codificación del sistema.
He intentado cosas como:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Pero no puedo encontrar una solución que haga todo lo que quiero:
- Identifique todos los archivos que tienen caracteres que no se pueden mostrar (lo anterior ignora demasiado)
- Para todos esos archivos en un árbol de directorios (recursivamente), ejecute mv oldname newname
- Opcionalmente, la capacidad de transcribir caracteres especiales como ä a a (no es obligatorio, pero sería increíble)
O
- Muestra correctamente todos estos archivos (y no hay errores en las aplicaciones al intentar abrirlos)
Tengo partes y piezas, como iterar sobre todos los archivos y moverlos, pero identificar los archivos y formatearlos correctamente para el comando mv parece ser la parte difícil.
Cualquier información adicional sobre por qué no se muestran correctamente o cómo "adivinar" la codificación correcta también es bienvenida. (He intentado convmv pero no parece hacer exactamente lo que quiero: http://j3e.de/linux/convmv/ )