📌
【Linux】pushdコマンドで快適にディレクトリ移動をする
やりたいこと
このような構成になっており、ディレクトリ間の移動が手間となっています。
# ディレクトリ構造
$ tree
.
├── test1
│ ├── 1
│ ├── 2
│ └── 3
├── test2
│ ├── 1
│ ├── 2
│ └── 3
└── test3
├── 1
├── 2
└── 3
# 階層移動するが指定が手間
$ cd ../../test3/1
環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
$ bash --version
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
pushd
コマンドを使ってディレクトリを移動する
pushd <ディレクトリ>
とすることで、
- ディレクトリへ移動
- 移動したディレクトリをディレクトリスタック(お気に入りをイメージしてください)に格納
を行います。
例えば/tmp/pushd-cd
から/tmp/pushd-cd/test1/3
へ移動する場合
# pushdコマンドで移動
$ pushd test1/3
/tmp/pushd-cd/test1/3 /tmp/pushd-cd
# ディレクトリスタック内を確認
$ dirs -v
0 /tmp/pushd-cd/test1/3
1 /tmp/pushd-cd
このように動作します。
またここから/tmp/pushd-cd/test3/1
へ移動すると
$ pushd /tmp/pushd-cd/test3/1
/tmp/pushd-cd/test3/1 /tmp/pushd-cd/test1/3 /tmp/pushd-cd
$ dirs -v
0 /tmp/pushd-cd/test3/1
1 /tmp/pushd-cd/test1/3
2 /tmp/pushd-cd
となります。
ディレクトリスタックにどんどん保存されていくんですね。
ディレクトリスタック内の任意のディレクトリに移動する
さきほどのディレクトリスタック内の1番に移動する場合、
$ pushd +1
/tmp/pushd-cd/test1/3 /tmp/pushd-cd /tmp/pushd-cd/test3/1
$ pwd
/tmp/pushd-cd/test1/3
pushd +<移動したいディレクトリの数字>
とすればOKです。
これをマスターできればディレクトリの移動が格段に楽になります。
ディレクトリスタックから削除する
popd
コマンドで実現出来ます。
$ dirs -v
0 /tmp/pushd-cd
1 /tmp/pushd-cd/test3/1
2 /tmp/pushd-cd/test1/3
$ popd +0
/tmp/pushd-cd/test3/1 /tmp/pushd-cd/test1/3
$ dirs -v
0 /tmp/pushd-cd/test3/1
1 /tmp/pushd-cd/test1/3
このようにディレクトリスタック0番の/tmp/pushd-cd
が削除されます。
登場したコマンドのドキュメント
それぞれbashの組み込みコマンドでした。
man bash
でコマンドオプションなどを確認可能です。
ユースケース
- 頻繁にディレクトリ移動するとき
-
cd../../..
のように階層移動が手間なとき
参考
Discussion