How can I create a directory and change my working directory to the new directory?
If you really want it to be just one command, I suggest adding something like this to your .bashrc
:
md () { mkdir -p "$@" && cd "$1"; }
Entering md foo
on the command line will then create a directory called foo
and cd
into it immediately afterwards. Please keep in mind, that you will have to reload your .bashrc
for the changes to take effect (i.e. open a new console, or run source ~/.bashrc
).
Cf. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time for possible alternatives, too.
mkdir "NewDirectory" && cd "NewDirectory"
- The part behind the
&&
will only execute if the 1st command succeeds. - It is called a Lists of Commands in the Bash manual.
There is also a shorthand version:
mkdir "NewDirectory" && cd "$_"
Example from command line:
$ false && echo "yes" $ true && echo "yes" yes
(edit) Add " to the commands since the directory might contain a space.
There's no built-in function for that, but you can use shell functionality to help you not have to type the argument of the cd
command again after running mkdir
:
- Type
cd
, then Esc . (or Alt+.) to insert the last argument from the previous command. cd !$
executescd
on the last argument of the previous command.- Press Up to recall the previous command line, then edit it to change
mkdir
intocd
.
You can define a simple make-and-change-directory function in your ~/.bashrc
:
mkcd () { mkdir "$1" && cd "$1"; }
Reload your .bashrc
(. ~/.bashrc
) or restart bash, and now you can type mkcd new-directory
.
This simple version fails in some unusual cases involving weird directory names or ..
and symbolic links. Here's one that does. For explanations, see the Unix & Linux version of this question.
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
}