unix – 上に行くのではなく、前のディレクトリに変更するにはどうすればいいですか?

shell unix

私は現在、木の下の非常に遠いところにある二つのパスの間を行ったり来たりして、ルートでお互いに流用しているのですが、この作業時間の多くを費やしています。もし cd にユーザーを最後にいたディレクトリに連れて行く引数があれば、私の人生はもっと楽になるだろうと思いました

それは、私が入っていればの話です

/etc/foo/bar/baz/moo

と入力してください

cd /var/lib/fubarred_app/blargh/logs

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

私はそれぞれの場所で十分な数のコマンドを使用しているので、自分で入力するのと同じように、戻って欲しいパスを見つけるのは難しいので、メモリキーはそれをカットしません

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

  217  Yitzchak  2011-08-17


ベストアンサー

The command

cd -

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

cd "$OLDPWD"

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


cdのPOSIX manページに言及しています

DESCRIPTION

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

OPERANDS

– オペランドにハイフンを使用した場合は、コマンドと同等とする

cd "$OLDPWD" && pwd

は、前の作業ディレクトリに変更し、その名前を書き込むようになっています

309  bryan  2011-08-17


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を自動的にスタックにプッシュします

104  slhck  2011-08-17


ジャンプ」という番組があります

  • autojump(基本機能を維持したまま)
  • j2 (一部の高度な機能でメンテナンスされていないようです)
  • z (高度な機能を備えた「j」のメンテナンス版)

これらはあらゆる種類のディレクトリのナビゲーションを容易にします。パスの一部を指定して使用すると、それだけで動作します

あなたの場合

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

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

これらのプログラムには好きな文字を割り当てることができます。)

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  2011-08-17


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

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

a 1

and later:

1

10  Mr Example  2011-08-18


cd -cd $OLDPWDに加えて

CTRL-Rを押して、前に入力したcdコマンドの数文字を入力することで、履歴検索を利用することができます。CTRL-Rを何度も押すと、古い検索結果が表示されます

この方法は、変更するパスが2つ以上ある場合に、より便利になります

10  musa  2011-08-18


bashmarksは、一連のフォルダをブックマークして、タブ補完でそれらの間をジャンプできるようにします

フォルダをブックマークするには、そのフォルダに移動して、このようにブックマークするだけです

bookmark foo

ブックマークの名前は “foo” になります。そのフォルダに戻りたいときは、以下のようにしてください

go foo

ブックマークの一覧を見るには

bookmarksshow

タブ補完機能を利用して、シュービーブックマークに移動するだけです

go sho[tab]

7  Handyman5  2011-08-18


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

5  Alger  2011-08-18


これは厳密にはあなたの質問への答えではないことを知っていますが、それはあなたをあなたの重要なディレクトリに連れて行くという目標に到達するのに役立ちます

どのような降順UNIX-bashでも、CDPATHを使ってcd-commandが検索するフォルダを拡張することができます

.bashrc-fileから

export CDPATH='.:~/source/'

cd は最初にあなたの現在のフォルダを検索し、次に私のコーディングプロジェクトディレクトリを検索します

cd myproject

… は、私が現在立っている場所から ~/sources/myproject に連れて行ってくれます

シンプルな小さな機能で、私のディレクトリナビゲーションを大いに助けてくれました

4  phareim  2011-08-19


うん、cd -がいいんだけど、シェルの力不足が気になる。popdpushdもいいけど、あのjもいい感じ

私は自分のユーティリティをリングに投入します…それは私がこの10年ほど前から構築し、カスタマイズし、移行してきたもので、私がやりたいことには問題なく動作しています

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

それがあなたのために機能するならば、それは素晴らしいことですが、もしそうでないならば、他の何かを得ることを約束してください 🙂cdだけでは生きていけない

3  Derek Wyatt  2011-08-18


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  2011-08-19


Autojumpは、あなたのアクションから、このビデオを参照してください、bash/sh/zsh “cd “コマンドです

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

j moo

2  oluies  2011-08-18


beam

自分のツールは持っていますが、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
}

Dependencies:

  • locate
  • grep
  • head

Drawbacks:

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

Improvements/modifications:

  • 最初のディレクトリを選択するのではなく、1,2,3,… と入力して /bin, /usr/bin, /usr/local/bin … に行くように、選択肢のリストを表示するようにコードを変更することができます

Usage:

  • この関数を /etc/bash.bashrc や ~/.bashprofile に入れておくと便利です

私の解決策のメリット

  • cd -のように2つのディレクトリに限定されない
  • ビームを使う前に一度もディレクトリーに行かなくても大丈夫です

2  user unknown  2011-08-18


タイトルとURLをコピーしました