web-dev-qa-db-ja.com

上がるのではなく、前のディレクトリに移動するにはどうすればよいですか。

私は現在、作業時間の多くを2つのパスの間を行ったり来たりするのに費やしています。ユーザーを最後のディレクトリに移動させるcdの引数があれば、私の生活はずっと楽になるだろうと私は思います。

つまり、私がいるのなら:

/etc/foo/bar/baz/moo

その後、次のように入力します。

cd /var/lib/fubarred_app/blargh/logs

パス全体をもう一度入力しなくても、最初のディレクトリに戻ることができます。

各場所で十分なコマンドを使用しているので、メモリキーを切ることはできません。自分で入力するのと同じくらい、元に戻って必要なパスを見つけるのは困難です。

前のディレクトリに移動するだけの簡単なコマンドはありますか?

210
Yitzchak

コマンド

cd -

主流のシェルのほとんどで必要なスワップを実行します。

cd "$OLDPWD"

これは前の作業ディレクトリを含む環境変数を使用します。


POSIXのmanページのcd には、次のように記載されています。

DESCRIPTION

上記のステップの実行中にPWD環境変数が変更された場合、OLDPWD環境変数も古い作業ディレクトリ(つまり、cdの呼び出しの直前の現在の作業ディレクトリ)の値に変更されます。

オペランド

- オペランドとしてハイフンが使用されている場合、これは次のコマンドと同等になります。

cd "$OLDPWD" && pwd 

これは前の作業ディレクトリに変更してからその名前を書き込みます。

295
bryan

Bryanの答えに加えて、スタックのようにディレクトリを構築するpushdpopdもあるのは言及に値する。これはWindows NTでも利用可能です。ただし、すべてのシェルで利用できるわけではありません。

たとえば、3つの異なるディレクトリに移動できます。pushdを呼び出すと、常にスタックが表示されます。

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

そしてpopdを3回続けて呼び出すと、スタック内のそれらのディレクトリに逆の順序でたどり着きます。同時に、スタックは再び空になります。

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Zshを使用している場合AUTO_PUSHDオプションがあり、これは自動的にcdをスタックにプッシュします。

105
slhck

いくつかの "ジャンプ"プログラムがあります

  • autojump (基本機能で管理されています)
  • j2 (一部の高度な機能では明らかにメンテナンスされていない)
  • z (高度な機能を備えた "j"のメンテナンスバージョン)

これらはあらゆる種類のディレクトリナビゲーションを容易にします。あなたはパスの一部を与えることによってそれを使います、そして、それはただ働きます。

あなたの場合

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

あなたはこれらのプログラムに好きな文字を割り当てることができます、 "j"は伝統です:)

j2とzは複数の検索語をサポートしています...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

...そしてもっとオプションがあります。

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank
13
hayalci

cd -cd $OLDPWDに加えて

履歴検索を使用するには、CTRL-Rを押して、以前に入力したcdコマンドを数文字入力します。繰り返しCTRL-Rを押すと、より古いマッチが表示されます。

この方法は、変更するパスが3つ以上ある場合に便利です。

10
musa

これを使ってディレクトリのエイリアスを簡単に作ることができます。

a() { alias $1=cd\ $PWD; }

a 1

以降:

1
9
Mr Example

bashmarks を使用すると、一連のフォルダをブックマークして、タブ補完しながらそれらの間を移動できます。

フォルダをブックマークするには、そのフォルダに移動してから、次のようにブックマークします。

bookmark foo

ブックマークの名前は "foo"になります。そのフォルダに戻りたいときは、

go foo

ブックマークのリストを見るには:

bookmarksshow

タブ補完は、shoobieブックマークに移動するために、単純に機能します。

go sho[tab]
6
Handyman5

もう1つの可能性は、2つのウィンドウを開いたままにして、1つを各ディレクトリに配置することです。

4
Alger

これは厳密にあなたの質問に対する答えではないことを知っていますが、という目標を達成して重要なディレクトリに移動するのに役立ちます.

どのUNIX系bashでも、CDPATHを使って、cdコマンドが検索するフォルダを拡張できます。

私の.bashrcファイルから:

export CDPATH='.:~/source/'

cdは最初に現在のフォルダを検索し、次に私のcoding-project-directoryを検索します。

cd myproject

..私は現在立っている場所から〜/ sources/myprojectに連れて行きます。

私のディレクトリナビゲーションを非常に助けている単純な小さな機能。

4
phareim

ディレクトリが2つしかない場合、最も簡単な方法は、前述のとおりです。

cd -

私が過去にそのようなことをしたとき、私は私がしたいくつかのトリックを持っていました、それは役に立つかもしれません。

  1. .cshrcファイルにエイリアスコマンドを追加してください。

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. 私のホームディレクトリから興味のあるパスへのショートカットをリンクします。これは一度だけです。

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

これにより、ディレクトリを簡単に変更できます。

   cd ~/moo
   cd ~/blargh
3
PearsonArtPhoto

うん、cd -は行くべき道ですが、私はあなたがあなたのシェルに持っている力の欠如について心配しています。 popdpushdも良いです、そしてそのjの事もまた良く見えます。

私は自分のユーティリティをリングに入れるでしょう...それは私が過去10年ほどかけて私が構築し、カスタマイズし、移行してきたものであり、それは私がやりたいことのためにちょうどうまく機能します。

私のディレクトリ管理ユーティリティのブログ投稿

それがあなたのために働くならば、素晴らしい、しかしそれがそれから私を約束しないならあなたは他に何かを得るでしょう:)あなたはcdだけでは生きられません。

3
Derek Wyatt

自動ジャンプ はbash/sh/zshの "cd"コマンドで、あなたの行動から、これを参照してください ビデオ .

最後のフォルダを学習したら、これであなたはmooに移動します。

j moo
2
oluies

ビーム

私は自分自身のツールを持っていますが、Dereksツールとjも見ることになるでしょう。

もちろん前後にジャンプするための最初の選択肢は

cd -

私のツールはlocateが利用可能なシステム上のユニークな名前を持つディレクトリのためのものです。一致するディレクトリ名を検索し、最初の一致にジャンプします。

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

依存関係:

  • 見つける
  • grep

欠点:

  • 最後に更新されたb-runより新しいディレクトリは見つかりません
  • 複数のディレクトリが一致する場合、それはあなたが念頭に置いていたものに惹かれているかどうか、あなたの運によって異なります。

改善点/修正点:

  • 最初のディレクトリを選択する代わりに、コードを変更して選択肢のリストを表示し、ユーザーに1,2,3、...と入力して/ bin、/ usr/bin、/ usr/local/binに移動するように指示する...

使用法:

  • 便利な方法で使用するには、関数を/etc/bash.bashrcまたは〜/ .bashprofileに入れてください。

私のソリューションの利点:

  • cd -のように2つのディレクトリに限定されません
  • ビームを使用する前に、一度ディレクトリにアクセスする必要はありません。
2
user unknown