A veces es molesto acceder a un directorio con el nombre de la carpeta. Digamos que tengo un directorio llamado a b c d
. Además de usar Tab, ¿hay alguna forma de acceder a la carpeta sin escribir el nombre del directorio?
Sé que Linux tiene un identificador único para cada archivo en particular. ¿Puedo usar esto para acceder a la carpeta? No sé si esto realmente se puede hacer o cómo hacerlo.
Creo que cuando Linux implementa un sistema de archivos, compara la unicidad de dos nombres de directorio. Por lo tanto, cada directorio debe ser único en un espacio. Pero creo que es como una clave primaria en un sistema de base de datos. ¿Es la clave principal el nombre del directorio o hay algún otro identificador único (quizás algunos números almacenados "bajo el capó")?
Intenta pensar en esto como un proceso. Si ejecuta el comando ps
en un terminal, genera una lista de procesos con el nombre y el número de cada proceso. Debe llamar a ese proceso con el número de proceso. Del mismo modo, ¿hay un número para un directorio para que pueda llamar al directorio con su número en lugar de llamarlo con su nombre?
En una investigación adicional, he encontrado que cada directorio tiene un único inode
. Sin embargo, hasta ahora no he encontrado ningún comando incorporado para acceder a un directorio por su inode
.
fuente
zsh
lugar debash
cd $(icd XXXX)
--- simplemente reescribió esafind
parte. Ahora su próxima tarea es ... verifique qué es más eficiente, su programa ofind
:-P.Respuestas:
Solución hecha por OP
No se encontró ningún comando incorporado aquí. Pero finalmente puedo escribir un programa en C para usar cd (llamemos a mi programa icd == (inode cd)) para ingresar en una carpeta usando el valor de inode. Aquí estoy publicando el código en bruto.
Pero hay un problema fundamental que he enfrentado aquí. Mientras se codifica la ejecución, se necesita un código C de un bash para crear un proceso secundario en el proceso bash (proceso primario). Desde el proceso secundario, el espacio de directorio es nuevo, y no puedo acceder al espacio de directorio del proceso primario desde allí. Así que no se pudo hacer nada excepto invocar una nueva ventana de bash desde aquí. En el futuro, intentaré implementar una nueva función de pestaña si la gente está interesada en esto. Pero creo que he enfrentado muchas críticas por hacer esto. Entonces la gente podría no estar interesada. Acabo de hacer para mi diversión.
El código RAW se comparte aquí,
Estoy usando la terminal de GNOME aquí. Obviamente para otra distribución el código será cambiado.
fuente
Cualquier entidad en (la mayoría) de los sistemas de archivos en Linux tiene un identificador único llamado an
inode
. Tenga en cuenta que un archivo puede tener más de un nombre ( enlace duro ), pero los directorios tienen solo un enlace en todos los sistemas de archivos que conozco. Tenga en cuenta que el concepto de inodo es local para el sistema de archivos, por lo que en dos dispositivos diferentes (partición o lo que sea) la unicidad no está garantizada.Puede ver el inodo de su directorio con
ls -ldi
:Entonces sabe que su directorio tiene el inodo 20873234. Ahora puede cambiar a él con el comando:
(Tenga en cuenta que
2> /dev/null
es para cerrar los mensajes de error sobre directorios ilegibles a lo largo de la ruta).Este comando escaneará la totalidad de su directorio de inicio, así que sea paciente. 1
¿Pero qué pasa con el uso
cd
y la finalización TAB de su shell?1. Esto debe ser lo másineficiente 2 que he publicado ... una oda a la entropía. La razón es que la "clave principal" bajo la cual el acceso a un archivo o directorio está optimizado, es rápido y directo es: ¿adivina qué? - el nombre de ruta:
/dir/dir/file_or_dir
. Además, para otorgarle acceso a un directorio dado, el sistema necesita verificar todos los permisos en la ruta ... así que nuevamente, acceder por inodo significa escanear recursivamente el sistema de archivos.2. Bueno, puede empeorar las cosas escaneando desde
/
. 33. Pero entonces no funcionará, porque los inodes son únicos solo por sistema de archivos (por montaje).
fuente
/dir/dir/file_or_dir
. Su programa C también necesitará escanear el sistema de archivos, yfind
ha sido optimizado durante los últimos 40 años ... aún así, ¿por qué? Si necesita un atajo, usea="/my/really/strange and long/dir path name/"
y luegocd "$a"
. No puedo vencerlo. O usa enlaces simbólicos.Puede hacer Tabrotar las carpetas disponibles en lugar de enumerarlas. Edite el archivo
~/.inputrc
y agregueSi lo desea para todos los usuarios, edite en su
/etc/inputrc
lugar.Presione Ctrl+ xy Ctrl+ rpara hacerlo efectivo.
Ahora use
cd
Tabpara navegar a su carpeta sin escribir su nombre.cd
Shift+ Tabrotará en la otra dirección.Vale la pena recordar que
cd -
te llevará a la última carpeta visitada.fuente
Puede usar comodines de shell.
Por ejemplo, puedo hacer
o
Y expandirá los comodines al nombre real y cambiará a ese directorio. Asumiendo que ese es el único directorio que coincide.
Si tiene ambos
a b c d
ya1b2c3d
,cd a?b?c?d
se expandirá a cualquieracd a1b2c3d a b c d
ocd a b c d a1b2c3d
(el orden real dependerá del núcleo, el sistema de archivos ...), y bash lo moverá silenciosamente a la primera ruta.Por otro lado, a menudo no tiene carpetas con nombres similares, por lo que algo así
a*d
es suficiente para expandir eso sin tener que escribir todos los caracteres intermedios. Esto es especialmente útil cuando en realidad no puede escribirlo (por ejemplo, los nombres están en una secuencia de comandos diferente, o incluso una codificación diferente), y de lo contrario habría necesitado codificar octalmente el nombre del archivo.fuente
Puede encontrar este directorio en un administrador de archivos, por ejemplo, nautilus y simplemente arrástrelo y suéltelo en la terminal.
Si anteriormente escribiste
cd
en la terminal, obtendrás el comando.fuente
No estoy seguro de si eso es exactamente lo que está pidiendo, pero
zsh
tiene algunos trucos geniales para acceder a un directorio por otros medios que no sean escribir el nombre estricto del directorio; por un lado, puede escribir una parte del nombre y se expandirá al nombre completo del directorio, lo que permite cosas muy útiles, por ejemplo:Golpeando TAB...
fuente
La forma más simple es hacer doble clic en el nombre del directorio (suponiendo que esté visible en la pantalla), luego escriba cd seguido de espacio y haga clic en el botón de la rueda con el mouse y copiará y pegará el nombre del directorio que ha resaltado. Al presionar la tecla Intro, cambiará al directorio requerido.
Uso este procedimiento todo el tiempo y no solo se limita a los nombres de directorio. Se puede usar para cualquier comando que use la línea de comando.
Buena suerte.
fuente
Si es solo uno o unos pocos directorios, ¿por qué no tener alias en su bashrc o cualquier archivo de inicio? Por ejemplo:
Luego, cuando quieras ir allí, solo escribe
abc
fuente
Puede escribir un programa para crear una tabla hash para todos los directorios de su sistema operativo. Básicamente sería un programa de aplanamiento de árboles.
Pero entonces podría hacer algo como
hash-cd 32okjv02
y haría la búsqueda de la tabla hash para la32okjv02
asignación del directorio. y salta a tu directorio. Y sería realmente rápido una vez que indexara todos sus directorios.Tendría que usar el alias mkdir para llamar a este programa en cada directorio nuevo y tal vez escribir un comando de comprobación / actualización de tabla hash que pudiera cronometrar cada minuto y al iniciar sesión.
fuente