¿Cómo puedo crear un directorio y cambiar mi directorio de trabajo al nuevo directorio?

18

Estoy buscando una manera de crear un directorio y cambiar mi directorio de trabajo actual a un directorio recién creado con solo usar un comando. ¿Cómo puedo hacer esto?

es decir, en lugar de hacer

user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$ 

quiero hacer

user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$

¿Cuál puede ser el comando ?

El efecto Koju
fuente

Respuestas:

27

Si realmente quieres que sea solo un comando, te sugiero agregar algo como esto a tu .bashrc:

md () { mkdir -p "$@" && cd "$1"; }

Al ingresar md fooen la línea de comando, se creará un directorio llamado fooe cdinmediatamente después. Tenga en cuenta que tendrá que volver a cargar su .bashrcpara que los cambios surtan efecto (es decir, abrir una nueva consola o ejecutar source ~/.bashrc).

Cf. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time para posibles alternativas, también.

Michael Biech
fuente
19

mkdir "NewDirectory" && cd "NewDirectory"

  • La parte detrás del &&solo se ejecutará si el primer comando tiene éxito.
  • Se llama Listas de comandos en el manual de Bash.
  • También hay una versión abreviada:

    mkdir "NewDirectory" && cd "$_"
    
  • Ejemplo de línea de comando:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (editar) Agregue "a los comandos ya que el directorio puede contener un espacio.

Rinzwind
fuente
mkdir "NewDir" && cd "$_"funciona muy bien que mkdir "NewDir" && cd "NewDir"como autocompletar no funciona. Por cierto, ¿qué es "$ _"?
TheKojuEffect
Más que eso sería bastante útil si podemos adjuntar un interruptor mkdirpara cambiar al nuevo directorio creado.
TheKojuEffect
@TheKojuEffect $ _ vea gnu.org/software/bash/manual/bashref.html#Lists Con respecto a este último: nadie le impide usar un alias o una función dentro .bashrc;)
Rinzwind
7

No hay una función incorporada para eso, pero puede usar la funcionalidad de shell para ayudarlo a no tener que cdvolver a escribir el argumento del comando después de ejecutar mkdir:

  • Escriba cd , luego Esc .(o Alt+ .) para insertar el último argumento del comando anterior.
  • cd !$se ejecuta cden el último argumento del comando anterior.
  • Presione Uppara recuperar la línea de comandos anterior, luego editarlo para cambiar mkdira cd.

Puede definir una función simple de crear y cambiar directorios en su ~/.bashrc:

mkcd () { mkdir "$1" && cd "$1"; }

Vuelva a cargar su .bashrc( . ~/.bashrc) o reinicie bash, y ahora puede escribir mkcd new-directory.

Esta versión simple falla en algunos casos inusuales que involucran nombres de directorios extraños o ..enlaces simbólicos. Aquí hay uno que sí. Para obtener explicaciones, consulte la versión de Unix y Linux de esta pregunta .

mkcd () {
  case "$1" in
    /*) mkdir -p "$1" && cd "$1";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
    *) mkdir -p "./$1" && cd "./$1";;
  esac
}
Gilles 'SO- deja de ser malvado'
fuente
Mi +1 es específicamente para las referencias específicas de Bash a los argumentos del último comando.
0xC0000022L
+1 para sobre ingeniería. ¡Virutas de embalaje! :)
mhvelplund
3
mkdir -p "as/many dirs/as you/want" && cd "$_"

hay una solución mencionada anteriormente (igual que mi solución pero sin la opción -p), pero creo que tiene algunos inconvenientes.

man mkdir
...
-p, --parents
       no error if existing, make parent directories as needed
...

Esto nos da dos beneficios:

  1. Podemos crear tantos subdirectorios como sea necesario de una vez
  2. Si el directorio existe, no arrojará un error, y aún podremos cambiar al directorio existente.

&& cd "$_"cambiará al directorio recién creado, ya que $_mantener el valor devuelto mimkdir

thebugfinder
fuente
esto funciona para mí
alhelal