🕺

mkdir -p と cd $_ でパッとディレクトリを立てて移動する

に公開

tl;dr

以下のコマンドで

  1. 指定したパスにディレクトリを作成する
  2. ディレクトリに移動する
    を一発で行えます。
mkdir -p <new-folder-path> && cd $_

あらまし

ぼくはプロジェクトを /github ディレクトリにまとめて管理しています。

.
└── github/
    ├── project-1
    ├── project-2
    └── project-3  

なので、毎回プロジェクトを立てるように以下のような手順でコマンドを実行しています。

cd github
mkdir new-project
cd new-project

# 初期化コマンドなどがつづく...

これ、めっちゃ面倒です。

さらに言えば、Organization などのリポジトリは以下のような構成にしています。

.
└── github/
    └── organization-1/
        ├── repo-1
        ├── repo-2
        └── repo-3

これを作るとなると、以下のようになります。
(あんまり orgs のリポジトリを mkdir から作ったりしないけど)

cd github
mkdir organization-1
cd organization-1
mkdir repo-1
cd repo-1

# ...

これは嫌なので、

  1. 入れ子構造のディレクトリをまとめて生成する
  2. 生成したディレクトリにそのまま移動する
    の2つのテクニックを使い、任意のディレクトリを作成+移動するコマンドをかんがえます。

1. 入れ子構造のディレクトリをまとめて生成する

mkdir コマンドには -p(`--parents) というオプションがあります。
https://atmarkit.itmedia.co.jp/ait/articles/1606/07/news015.html#:~:text=示しています-,mkdirコマンドの主なオプション,-mkdirコマンドの

これを指定すると、以下のようなパスをディレクトリ名として与えたとき、親ディレクトリが存在しなければ作成します。

# hoge, huga も作成
mkdir -p hoge/huga/piyo

2. 生成したディレクトリにそのまま移動する

shell の特殊変数に $_ というものがあります。これは「最後に実行したコマンドの最後の引数」を格納しています。
https://www.tohoho-web.com/ex/shell.html#:~:text=%24_ %23 最後に実行したコマンドの最後の引数

つまり、mkdir の直後に $_ を参照すると、作成したフォルダへの相対パスが取得できます。

$ mkdir -p hoge/huga/piyo && echo $_
hoge/huga/piyo

これを利用して cd することで、作成したフォルダに移動することができます。

mkdir -p hoge/huga/piyo && cd $_

参考

https://atmarkit.itmedia.co.jp/ait/articles/1606/07/news015.html
https://www.tohoho-web.com/ex/shell.html

GitHubで編集を提案

Discussion