🕺
mkdir -p と cd $_ でパッとディレクトリを立てて移動する
tl;dr
以下のコマンドで
- 指定したパスにディレクトリを作成する
- ディレクトリに移動する
を一発で行えます。
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
# ...
これは嫌なので、
- 入れ子構造のディレクトリをまとめて生成する
- 生成したディレクトリにそのまま移動する
の2つのテクニックを使い、任意のディレクトリを作成+移動するコマンドをかんがえます。
1. 入れ子構造のディレクトリをまとめて生成する
mkdir
コマンドには -p
(`--parents) というオプションがあります。
これを指定すると、以下のようなパスをディレクトリ名として与えたとき、親ディレクトリが存在しなければ作成します。
# hoge, huga も作成
mkdir -p hoge/huga/piyo
2. 生成したディレクトリにそのまま移動する
shell の特殊変数に $_
というものがあります。これは「最後に実行したコマンドの最後の引数」を格納しています。
つまり、mkdir
の直後に $_
を参照すると、作成したフォルダへの相対パスが取得できます。
$ mkdir -p hoge/huga/piyo && echo $_
hoge/huga/piyo
これを利用して cd
することで、作成したフォルダに移動することができます。
mkdir -p hoge/huga/piyo && cd $_
参考
Discussion