Me gustaría cambiar frecuentemente entre directorios que están en rutas totalmente no relacionadas, por ejemplo /Project/Warnest/docs/
y ~/Dropbox/Projects/ds/test/
.
Pero no quiero escribir cd /[full-path]/
todo el tiempo. ¿Hay algún comando de acceso directo para cambiar a directorios previamente trabajados?
Una solución que se me ocurre es agregar variables de entorno a mi bash
.profile
para los directorios de uso frecuente y cd
para que usen esas variables.
¿Pero hay alguna otra solución para esto?
bash
shell
command-line
alias
cd-command
saiy2k
fuente
fuente
Respuestas:
Si solo está cambiando entre dos directorios, puede usar
cd -
para ir y venir.fuente
Hay una variable de shell
CDPATH
enbash
yksh
ycdpath
enzsh
:Entonces puede configurar en su ~ / .bashrc:
Luego
cd docs
ycd test
lo llevará al primer directorio que se encuentre. (Quiero decir, incluso si un directorio con el mismo nombre existirá en el directorio actual,CDPATH
aún será consultado. SiCDPATH
contendrá más directorios con subdirectorios con el nombre dado, se usará el primero).fuente
$CDPATH
sea.
(una entrada explícita, es decir,:
también funciona). De lo contrario, terminará con un comportamiento extrañoCDPATH
en el que los directorios tienen prioridad sobre los directorios en el directorio de trabajo actual, que probablemente no desee.export
. De esa manera,CDPATH
no se exporta a scripts con efectos potencialmente extraños o dañinos. Vea aquí para más discusión y ejemplos.cd
refiere a él.Algo más que podrías probar es una herramienta llamada autojump . Mantiene una base de datos de llamadas a su alias (
j
por defecto) e intenta tomar decisiones inteligentes sobre dónde desea ir. Por ejemplo, si escribe con frecuencia:Puede usar lo siguiente para llegar en un apuro:
Está disponible para Debian y Ubuntu, y se incluye por usuario en
~/.bashrc
o~/.zshrc
por defecto.fuente
cd -
es útil saber si aún no lo sabe, creo que esta es una solución mucho mejor que la respuesta principal actual.apt-get install autojump
en Ubuntu, pero también para muchos otros como se documenta en su página) para la instalación en todo el sistema, pero cada usuario debe cargarlo en su entorno de shell para que pueda anular el cd para realizar un seguimiento de donde vassource /usr/share/autojump/autojump.sh
que se debe agregar a ~ / .bashrc para que funcione el salto automático .Si se trata de una pequeña cantidad de directorios, puede usar
pushd
para rotar entre ellos:a diferencia
cd -
, puede usar esto con más de dos directoriosSiguiendo la sugerencia de Noach, ahora estoy usando esto:
ejemplo de uso:
Obviamente, esto es solo para rotar a través de la pila y no maneja agregar nuevas rutas; tal vez debería cambiarle el nombre.
fuente
pushd
ypopd
para atravesarlo, pero no es que empujado pudiera rotar lo que se ha usado hasta ahora ...Yo uso
alias
en bashrc para hacer esos cds.como:
fuente
~/.bashrc
o/etc/bash.bashrc
. No lo usé.profile
antes, así que no sé la relación entre ellos :-(.bash_profile
y funciona muy bien ... gracias :)Encontré un script (típicamente llamado acd_funch.sh) que resolvió este problema por mí. Con esto, puede escribir
cd --
para ver los últimos 10 directorios que ha utilizado. Se verá más o menos así:Para ir a
~/Music/thirddir
escribircd -2
Referencias
NOTA: Este script se publicó originalmente en un artículo de la gaceta de Linux que está disponible aquí: acd_func.sh: extiende el CD de bash para mantener, mostrar y acceder al historial de los nombres de directorios visitados .
fuente
Prueba la
cdable_vars
opción de shell en bash. Lo enciendes conshopt -s cdable_vars
.Entonces necesitas establecer tus variables
export dir1=/some/path
. y finalmentecd dir1
, etc. Luego puedes ponerlo en tu~/.bashrc
para que se pegue.fuente
Use "pushd -n " (suponiendo que use bash).
Agregue a su ~ / .bashrc:
entonces,
cd ~
es tu hogarcd ~1
es~/Dropbox/Projects/ds/test/
cd ~2
es/Project/Warnest/docs/
Puede usar
~1
,~2
etc. exactamente de la misma manera que~
.fuente
Hay muchas buenas sugerencias aquí. El uso dependerá de si tiene una pequeña lista fija de directorios entre los que cambia, o si está buscando una solución más genérica.
Si se trata de una pequeña lista fija, configurar alias simples (como sugirió Felix Yan) sería más fácil de usar.
Si está buscando una solución más generalizada (es decir, muchos directorios diferentes, que cambian con el tiempo), usaría pushd y popd (como sugirió Useless). Personalmente, considero que el pushd / popd predeterminado es difícil de usar, especialmente cuando comienzas a cambiar entre muchas carpetas; Sin embargo, escribí algunos ajustes que me lo hacen mucho más fácil. Agregue lo siguiente a su bashrc:
pd
(como una forma más corta depushd
) para saltar a una nueva carpeta, recordando dónde estaba.dirs
para ver la lista de directorios guardados.pd 3
para saltar al directorio número 3.Ejemplo de uso:
fuente
Lo siguiente pareció funcionar en el caso en el que lo probé, y puede dejar caer los nombres de sus directorios como enlaces simbólicos en ~ / Marcadores:
fuente
function
línea entra en su .bashrc (puede escribirla en su terminal para probar, pero desaparecerá cuando cierre esa ventana), las líneas antes de configurar el caso de prueba de "testdir" convirtiéndose en un nombre/tmp
y La última línea es la prueba para ver si funciona.Podrías hacer algo peor que probar j2 .
Desde el archivo Léame:
Lo uso ampliamente y lo recomiendo.
fuente
Aconsejaría usar zsh , ese shell como muy buena terminación de TAB para directorios, archivos e incluso opciones para la mayoría de los programas cli.
He estado usando ese shell durante años y extrañaría la funcionalidad si hubiera desaparecido. Crear secuencias de comandos de zsh también es muy divertido, con una gran cantidad de frases ingeniosas que pueden ayudarlo todos los días.
fuente
En mi experiencia, la mayor aceleración en la navegación en un shell es usar su funcionalidad de búsqueda de historial. En Bash puede buscar hacia atrás en su historial de comandos presionando
Ctrl
+R
y escribir algún patrón. Ese patrón se compara con las entradas anteriores en su historial, ya seancd
comandos u otras operaciones, y se hacen sugerencias a medida que escribe. Simplemente presione enter para ejecutar el comando sugerido nuevamente. Esto se llamareverse-search-history
en Bash y me encanta. Me ahorra muchas pulsaciones de teclas y me ahorra memoria interna.Es bueno porque solo tiene que recordar una parte más pequeña de un comando, como
Drop
oWa
para distinguir entre las dos entradas del historialcd ~/Dropbox/Projects/ds/test/
ycd /Project/Warnest/docs/
.fuente
También uso estos alias (agregarlos a ~ / .bashrc):
Es mucho más rápido ir al directorio superior con ellos (sin embargo, solo resuelve la mitad de la navegación).
fuente
si estás usando zsh:
no tiene que escribir
cd
, solo escriba la ruta del directorio (/foo/bar/baz<Enter>
igual acd /foo/bar/baz<Enter>
)requiere
auto_cd
que se establezca la opciónTab
tecla (se/u/sh/pi<Tab>
expande a/usr/share/pixmaps
; funciona también para los nombres de archivo)fuente
shopt -s autocd
, por lo que ya no es una bondad de zsh.Hay una herramienta bastante agradable para cambios rápidos de directorio:
xd - Cambiador de directorios rápido eXtra http://xd-home.sourceforge.net/xdman.html
un poco incómodo es que necesita mapearlo en bash profile o similar, ya que solo genera el directorio
puedes hacer cosas como:
fuente
f() { cd "$(xd -g "$@")"; }
para manejar correctamente los directorios y espacios espaciados en los argumentos axd
(probablemente no necesite la ruta). Si nunca lo usaxd
de otra manera, puede hacerlo alternativamentexd() { cd "$(command xd -g "$@")"; }
(alternativamente, usarlo/usr/bin/xd
en lugar decommand xd
- siempre puede ejecutarlocommand xd …
si necesita evitarlo).Nunca debe escribir la ruta completa en shell de todos modos. Siempre puedes usar:
en lugar de
fuente
P*
menos que Project sea el único archivo que comienza con P. La finalización de la pestaña puede alternar (de manera predeterminada en la mayoría de los shells; necesita volver a vincular la pestañamenu-complete
en bash) y se resuelve instantáneamente en casos simples así, no hay que esperar por ello/P*/W*/*/mydoc*
parece que funcionaría bien hasta que un día hiciste otro archivo que coincida con ese globo, y de repente terminas abriendo ambos a la vez./u*/*/g++
es impresionantemente pocos caracteres, pero espero que nada más en ninguna de las subcarpetas de cualquiera de mis carpetas raíz comiencen conu
nombreg++
. (Como un buen compromiso, en algunos shells puedes usar la pestaña para expandir los globos en el lugar a medida que avanzas)También hay
OLDPWD
una variable de entorno que, según IEEE 1003.1 (POSIX), debe actualizarse con el directorio de trabajo anterior cada vez quecd
cambia el directorio de trabajo (para los curiosos, línea 80244 de la página 2506 de IEEE 1003.1-2008).fuente
También hay una aplicación "wcd" creada específicamente para esto (también portada a cygwin, ya que estoy en eso). Puede crear accesos directos, marcadores de directorios con él. También es compatible con comodines. Leer la página del manual y los documentos en / usr / share / wcd debería ayudar mucho.
http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html
fuente
cdargs es la herramienta más eficiente para marcar un directorio: http://www.youtube.com/watch?v=uWB2FIQlzZg
fuente
sudo apt-get cdargs
en ubuntu. Por cierto, el video de YouTube es realmente malo, pero la herramienta es excelente.Pruebe fastcd ( https://github.com/frazenshtein/fastcd ) Establece el enlace que registra los directorios visitados desde bash. Y establece el script como alias "j", que le muestra los últimos directorios visitados, con la capacidad de crear cd rápidamente (comience a escribir para filtrar directorios). Se requiere la modificación de .bashrc para hacer el alias "j".
Obteniendo herramienta
Instalar módulos requeridos
Fuente del archivo set.sh en su bashrc
Y actualizar bashrc
Luego simplemente escriba "j" en la consola
fuente
.bashrc
?Tenía la misma pregunta, y primero encontré esta respuesta . Instalé la utilidad z ( https://github.com/rupa/z ).
Esto es exactamente lo que usted busca, porque z aprende de sus comandos cd, y realiza un seguimiento de los directorios de acuerdo con el frecency principio (frecuente y reciente). Entonces, después de hacer ambos comandos de CD una vez, puede hacer algo como:
saltar a
/Project/Warnest/docs/
y~/Dropbox/Projects/ds/test/
respectivamente. Los argumentos para z son expresiones regulares, por lo que ni siquiera necesita escribir un nombre de carpeta completo.fuente
Actualización (2016): ahora uso FASD para esto, que permite la búsqueda difusa basada en sus últimos directorios.
He creado una herramienta para esto, en Ruby. Le permite usar archivos YAML para declarar sus proyectos.
He escrito un pequeño artículo al respecto aquí: http://jrnv.nl/switching-projects-terminal-quickly/
También publiqué la fuente en GitHub: https://github.com/jeroenvisser101/project-switcher
fuente
He estado usando mi propia utilidad cdhist para administrar esto durante muchos años. Alias su comando de CD y mantiene automáticamente una pila de directorios.
fuente
Puede usar
export
para asignar sus rutas de directorio a variables y luego hacer referencia a ellas.fuente
export
declaraciones en su~/.bashrc
, y siempre estarán disponibles.Algunas sugerencias aquí:
La idea más directa, agregaré un alias en el archivo .profile
Luego use
$ dir1
odir2
, puede cdSi siempre está cambiando solo en dos directorios. usando
cd -
cambiará entre ellos.fuente
La solución que uso para esta situación es
screen
. Pantalla de inicio y cree una ventana para cada directorio conC-a c
y navegue hasta allí. Cambiar entre ventanas / directorios conC-a n
oC-a p
. Nombra las ventanas conC-a A
. Luego puede abrir una lista de sus ventanasC-a "
y navegar usando el número o nombre de la ventana. Como es asíscreen
, puede desconectarse de la sesión guardando su espacio de trabajo y volver a adjuntarlo más tarde con la misma configuración.fuente
Parece que lo que necesita es básicamente un archivo de proyecto para su flujo de trabajo. Con directorios que pertenecen a su actividad, como en un IDE de programación. Prueba Zsh Navigation Tools y la herramienta
n-cd
allí. Le permitirá navegar por las últimas carpetas visitadas y también definir unHotlist
directorio con su elección:n-cd
se puede vincular a una combinación de teclas con:fuente
TL; DR
Fish
de shell interactivo que la autonomía de inmediato (fish
>zsh
>bash
).POSIX
/Bash
secuencias de comandos que es la sintaxis más amplio apoyo (POSIX
>Bash
>Zsh
>Fish
).Conchas
Haber probado diferentes shells aquí es mi opinión (en orden de prueba / adopción):
Bash
:Zsh
+oh-my-zsh
:cd /e/x1
→cd /etc/X11/
);Fish
+oh-my-fish
(actual) es el mejor fuera de la caja:Usa alias significativos
Cada shell se puede expandir usando
function
yalias
, aquí están los que uso relacionados con su problema (compatible con POSIX):Hay básicos, pero realmente significativos, fáciles de recordar y autocompletar.
Conoce tu caparazón
Configure
CDPATH
para agregar sus directorios más usados (por ejemplo~/projects/
,/etc/init.d/
) para que pueda saltar rápidamente a ellos.Vea la respuesta de manatwork para obtener más detalles
CDPATH
.Hangout y leer
fuente
exit
, sale del shell interactivo. Esos "alias significativos" podrían seralias back='cd -'
yalias up='cd ..'
, pero no se preocupe, esos comandos nunca devolverán false (¿ningún directorio anterior? ¡Lo envía a casa! ¿Ya está en la raíz? ¡Es un no-op!) Y, por lo tanto, nunca saldrá . Tambiénalias back='cd $OLDPWD'
tenga en cuenta (tenga en cuenta las comillas simples) ya que no tendrá ningún resultado (cd -
le dice a dónde lo está enviando, lo que probablemente sea innecesario ya que su mensaje tiene esa información)anc
es una herramienta de línea cmd (abreviatura de ancla), que mantiene marcadores de directorios. (hasta ahora solo probado con bash)En tu caso:
esto agrega ambos directorios a la lista de anclaje (piense en marcadores)
ahora si quiere saltar
/Project/Warnest/docs/
desde cualquier lugar de su sistema, escriba:y si quieres saltar para
~/Dropbox/Projects/ds/test/
escribir:Además de hacer coincidir el texto con las rutas marcadas, anc tiene muchas otras formas convenientes para saltar por los directorios.
inicia el modo interactivo, que enumera todos los marcadores por número, por lo que todo lo que tiene que escribir es el número
Si escribe:
se muestra una lista que coincide con todos los marcadores (en su caso, ambos marcadores) y puede seleccionarla usando las teclas de flecha, esta es una forma muy rápida e intuitiva.
Obtenga anc en la página de github del proyecto: https://github.com/tobimensch/anc
También hay un archivo README con ejemplos de uso.
Divulgación completa: soy el autor de este script. Espero que algunas personas lo encuentren útil.
fuente