Mientras desempaquetaba un archivo tar, encontré un directorio que ls
informa como "??????????????? ?????". Presumiblemente, ¿el nombre no está en Unicode? De todos modos, no encuentro una manera de acceder a la carpeta. Lo he intentado cd $(find -inum inode_number)
, pero eso me da
"bash: cd: ./??????????: No such file or directory".
¿Existe otra forma de acceder a una carpeta directamente por su número de inodo?
Respuesta1
Un enfoque general para poder operar en cualquier directorio (o archivo) es utilizar su número de inodo.
Primero, use ls para obtener el inodo de la carpeta en cuestión:
ls -lia
-l
para listado largo (opcional)-i
para obtener valores de inodo-a
para ver todos los archivos, incluso los archivos ocultos (opcional)
En la lista verás un número largo en la primera columna, algo como esto:
2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME
Ahora puedes cambiar a ese directorio usando:
cd "$(find -inum ######)"
...pero sustituyendo ###### con el número largo que obtuviste en el listado del directorio.
Por supuesto, el comando no tiene por qué ser cd
. Podría ser rm
, cp
, mv
,etc....
Respuesta2
Dado que es probable que los caracteres sean internacionales, es probable que aparezcan como códigos de control en su conjunto de caracteres en_US, razón por la cual ls los muestra como signos de interrogación.
Esto puede deberse a que su distribución eligió el alias ls de forma predeterminada en el perfil global. Por ejemplo:
alias ls='ls -q'
Puedes ver si tu distribución lo ha hecho escribiendo en tu shell:
alias ls
Lo cual imprimirá algo como lo siguiente:
$ alias ls
alias ls='ls --color=auto'
La página vinculada a continuación sugiere que si hace "ls -b", verá los códigos de control octal para saber al menos qué caracteres están en uso.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
Suponiendo que eso no funcione, también se menciona otra opción más cerca de la parte inferior:
Una herramienta que desconocía hasta ahora llamada OctalDump (en Debian - /usr/bin/od)
$ ls | od -b
Le mostrará la forma octal de los códigos de control.
$ ls | od -c
Le mostrará los caracteres, incluido cualquier espacio en blanco adicional oculto que pueda estar al final (tenga en cuenta los espacios adicionales al final en su ejemplo)
Una vez que sepa qué caracteres de control están en juego y si hay espacios en blanco ocultos adicionales, podrá encontrar una manera de acceder al directorio cd escapando de los caracteres de control. De lo contrario, tiene un par de opciones para cambiar el nombre del directorio.
La página anterior también, convenientemente, tiene un método rápido y sucio para eliminar los caracteres de control a través del comando mv, que creo que funcionará, siempre y cuando SÍ escapes del espacio, pero NO escapes de los signos de interrogación (convirtiéndolos así en un solo carácter). comodines), y siempre y cuando no exista nada más en el directorio donde se encuentra este directorio fraudulento. El motivo de estos requisitos explícitos es que solo utiliza caracteres comodín y un espacio único, por lo que no desea que el comodín coincida inadvertidamente con ningún otro archivo o directorio.
Si el método anterior no funciona, es casi seguro que puede utilizar el método de búsqueda mencionado en otras respuestas, de una manera diferente. En lugar de intentar acceder al directorio usando el número de inodo, que es lo que dijo que había probado, puede cambiarle el nombre usando el número de inodo. Sólo asegúrese de copiar todo el conjunto de3líneas para ese comando de la página anterior (sin embargo, reemplace la parte "nombre deseado" con el nombre real al que desea cambiarle el nombre).
Una vez que se cambia el nombre del directorio, debería poder acceder a él. Sólo puedo esperar que no contenga también archivos con códigos de control en los nombres, o tendrás que enjuagar y repetir para cada archivo (y/o subdirectorio) en el directorio cuyo nombre acabas de cambiar, momento en el cual se generaría un bucle for. Probablemente sea prudente nombrar cada archivo como un número, incrementando desde 1. :-)
Respuesta3
"?" tiene un significado especial en el shell, significa "cualquier carácter, incluido ninguno". Entonces, si su archivo realmente se llama "??????????????? ?????" probablemente tengas que escapar del "?" (y espacios también) para que puedas probar algo como cd \?\?\?\?\?\?\ \?\?\?\? (si aún no lo intentaste)
Eso supone que alguien le dio intencionalmente al archivo ese nombre complicado, en lugar de una codificación confusa/corrupta/ilegal.
Respuesta4
Una forma sencilla de ver lo que hay allí es enviar por FTP a la máquina con FileZilla. Luego puedes usar FileZilla para cambiar el nombre del directorio.