Cuando se crea un archivo con determinados caracteres especiales, puede llegar a ser dificil eliminarlo o renombrarlo. Si el archivo se ha copiado desde internet o desde un dispositivo externo y el conjunto de caracteres establecido en el sistema es UTF-8, generalmente no hay problema; se puede acceder a él desde el entorno de ventanas o la terminal. Pero si se ha generado automáticamente (al ser descomprimido, por ejemplo), linux no reconocerá los caracteres y no se podrá leer ni eliminar.
La solución es acceder a él usando una terminal mediante su nodo, evitando el problema que supone usar su nombre.
(一般コミック) [大友克洋] AKIRA 第01巻.zip
Este archivo se ha creado en windows. Al copiarlo conserva los kanji japoneses y KDE permite operar con él normalmente, pero al descomprimirlo aparecen otros archivos cuyos nombres no son interpretados como válidos
?????S?t????1_????.png
?????S?t????1_?-??.png
?????S?t????1_???-?+??.png
?????S?t????1_???-????.png
?????S?t????1_???-?-??.png
Usando find se puede acceder a ellos y cambiar su nombre.
Para cambiar uno sólo, primero se obtiene su índice de nodo con ls -i
$ ls -i
12323499 ?????S?t????1_????.png
12323351 ?????S?t????1_?-??.png
12323581 ?????S?t????1_???-?+??.png
12323418 ?????S?t????1_???-????.png
12323479 ?????S?t????1_???-?-??.png
Despúes usando find…
$ find . -maxdepth 1 -inum 12323499 -exec mv '{}' ./akira_01.png \;
Y el archivo cambia de nombre.
Para cambiarlos todos en masa, asignando un número incremental
$ let c=0; \ for i in `ls *.png -i|cut -d ' ' -f1`; do let c=c+1 ; \ find *.png -maxdepth 1 -inum $i -exec mv '{}' ./AKIRA_01_$c.png \; ; \ done
Los archivos quedan como
AKIRA_01_1.png
AKIRA_01_2.png
AKIRA_01_3.png
AKIRA_01_4.png
AKIRA_01_5.png
Atención: hay que tener en cuenta que el penúltimo ; termina la orden dada con exec, así que si no se añade, bash devolverá un error de find: falta el argumento de `-exec’. Además es conveniente añadir el caracter de escape \ para prevenir posibles efectos derivados de la interpretación de los caracteres especiales.