📌

【Linux】pushdコマンドで快適にディレクトリ移動をする

2023/08/08に公開

やりたいこと

このような構成になっており、ディレクトリ間の移動が手間となっています。

# ディレクトリ構造
$ 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../../..のように階層移動が手間なとき

参考

https://kcfran.com/2022/02/26/linux-command-pushd-popd-dirs/
https://qiita.com/noraworld/items/81c12253d22b7575151a

Discussion