ディレクトリ間の移動を簡単に行うことが出来るようになる、「pushd」と「popd」コマンドの使い方を紹介します。
pushdとpopdについて
「pushd」と「popd」は、ディレクトリを効率的に移動するために使用される便利なコマンドです。
「ディレクトリスタック」と呼ばれる、移動したディレクトリの履歴を保存する機能を使用して、簡単に移動前のディレクトリに戻れるようになります。
深い階層のディレクトリを行ったり来たりする場合や、複数のディレクトリを頻繁に移動する場合にとても便利です。
基本的な使い方
「pushd」と「popd」は以下のように使用し、「dirs」でディレクトリスタックの内容を表示することが出来ます。
- pushd ディレクトリ : 指定したディレクトリに移動し、ディレクトリをディレクトリスタックに追加
- popd : 直前にいたディレクトリへ移動
- dirs : 現在のディレクトリスタックを表示
コマンド実行例
作検証用に用意した以下の構造のディレクトリで、実際に「pushd」と「popd」を使用してディレクトリ間を移動してみます。
$ tree /home/tamohiko/work/dir_01/ /home/tamohiko/work/dir_01/ └── dir_02 └── dir_03 └── dir_04 └── dir_05 5 directories, 0 files
pushdで移動
現在は「/home/tamohiko/work/dir_01」ディレクトリにいます。
$ pwd /home/tamohiko/work/dir_01
「pushd」で「./dir_02」ディレクトリに移動します。
$ pushd ./dir_02/ ~/work/dir_01/dir_02 ~/work/dir_01 # 移動後のディレクトリスタックが表示される
「pushd」で「dir_05」ディレクトリに移動します。
$ pushd dir_03/dir_04/dir_05/ ~/work/dir_01/dir_02/dir_03/dir_04/dir_05 ~/work/dir_01/dir_02 ~/work/dir_01
dirsでディレクトリスタックを表示
「dirs」でディレクトリスタックを表示してみます。
「-v」オプションを付けると、ディレクトリスタックにインデックス番号が表示されて、どの順番でディレクトリを移動したかが分かりやすくなります。
0番が現在のディレクトリを示し、1番が一つ前のディレクトリ、2番がその前のディレクトリとなります。
$ dirs -v 0 ~/work/dir_01/dir_02/dir_03/dir_04/dir_05 1 ~/work/dir_01/dir_02 2 ~/work/dir_01
「pushd」で移動した「dir_01」-「/dir_01/dir_02」-「/dir_01/dir_02/dir_03/dir_04/dir_05」 の順にディレクトリスタックにディレクトリの移動履歴が追加されていることが分かります。
popdで直前にいたディレクトリに移動
「popd」で直前にいた「/home/tamohiko/work/dir_01/dir_02」ディレクトリに移動してみます。
cdコマンドで移動する場合は、フルパスで「cd /home/tamohiko/work/dir_01/dir_02」と指定するか、相対パスで「cd ../../../」と指定する必要がありますが、popdを使用する場合は「popd」と入力するだけで移動することが出来ます。
$ popd ~/work/dir_01/dir_02 ~/work/dir_01 $ pwd /home/tamohiko/work/dir_01/dir_02
再度popdを実行すると、「/home/tamohiko/work/dir_01」ディレクトリに移動します。
$ popd ~/work/dir_01
pushd +インデックス番号
ディレクトリスタックのインデックス番号を指定して、そのディレクトリに移動することも出来ます。
pushd +インデックス番号
実行例
現在のディレクトリスタック内容を表示してみます。
$ dirs -v 0 ~/work/dir_01/dir_02/dir_03/dir_04/dir_05 1 ~/work/dir_01/dir_02/dir_03/dir_04 2 ~/work/dir_01/dir_02/dir_03 3 ~/work/dir_01/dir_02 4 ~/work/dir_01
「pushd +3」と入力すると、ディレクトリスタックの3番目のディレクトリ「/home/tamohiko/work/dir_01/dir_02」に移動することができます。
$ pushd +3 ~/work/dir_01/dir_02 ~/work/dir_01 ~/work/dir_01/dir_02/dir_03/dir_04/dir_05 ~/work/dir_01/dir_02/dir_03/dir_04 ~/work/dir_01/dir_02/dir_03
「/home/tamohiko/work/dir_01/dir_02」に移動したことが確認できます。
$ pwd /home/tamohiko/work/dir_01/dir_02
popd +インデックス番号
ディレクトリスタックのインデックス番号を指定すると、ディレクトリスタック内の情報を削除することが出来ます。
popd +インデックス番号
実行例
現在のディレクトリスタック内容を表示してみます。
$ dirs -v 0 ~/work/dir_01/dir_02 1 ~/work/dir_01 2 ~/work/dir_01/dir_02/dir_03/dir_04/dir_05 3 ~/work/dir_01/dir_02/dir_03/dir_04 4 ~/work/dir_01/dir_02/dir_03
「popd +2」と入力すると、ディレクトリスタックの2番目のディレクトリ「/home/tamohiko/work/dir_01/dir_02/dir_03/dir_04/dir_05」の情報を削除します。
$ popd +2 ~/work/dir_01/dir_02 ~/work/dir_01 ~/work/dir_01/dir_02/dir_03/dir_04 ~/work/dir_01/dir_02/dir_03
ディレクトリスタックの2番目のディレクトリ「/home/tamohiko/work/dir_01/dir_02/dir_03/dir_04/dir_05」の情報が削除されました。
$ dirs -v 0 ~/work/dir_01/dir_02 1 ~/work/dir_01 2 ~/work/dir_01/dir_02/dir_03/dir_04 3 ~/work/dir_01/dir_02/dir_03
pushd -n ディレクトリ
「-n」オプションを使用すると、実際にディレクトリを移動せずにディレクトリスタックにディレクトリ情報を追加することが出来ます。
pushd -n ディレクトリ
実行例
現在のディレクトリスタック内容を表示してみます。
$ dirs -v 0 ~/work/dir_01
「pushd -n ./dir_02」で「./dir_02」ディレクトリをディレクトリスタックに追加します。
$ pushd -n /home/tamohiko/work/dir_01/dir_02/ ~/work/dir_01 ~/work/dir_01/dir_02/
ディレクトリを移動せずにディレクトリスタックに「/home/tamohiko/work/dir_01/dir_02/」ディレクトリが追加されました。
$ pwd /home/tamohiko/work/dir_01 $ dirs -v 0 ~/work/dir_01 1 ~/work/dir_01/dir_02/
コメント