ディレクトリを頻繁に変更するときに入力を最小限に抑える方法は?


5

コマンドライン上の異なるディレクトリを簡単に切り替えるための優れたLinuxコマンドは何ですか?

私はしばしば長い名前の異なるディレクトリを切り替える必要があります。例えば

cd foo/20100801-rev124-test2
ls 
cd ../20100801-rev124-test1
ls 
cd ../20100802-rev126-bar

通常、タブ補完を使用するため、次のようになります。

cd ../2010080<TAB>2<TAB>-rev12<TAB>6-<TAB>bar

しかし、これらの名前はすべて非常に似ているので面倒です。そのため、タブ補完は実際には多くの作業を節約しません。

そのような状況でタイピングを最小限に抑えるためにどのようなトリックを使用しますか?

ところで、私は時々使用pushdしていますpopdが、ここでは特定の順序でディレクトリにアクセスしないため、あまり役に立ちません。

更新:

適切な解決策については、他の関連する質問に対する受け入れられた回答を参照してください。基本的に、別のコマンドを作成するだけです:cd

function cd2 { select a in $1*; do cd $a; break; done }

すべての可能な補完を一度にリストします。

$ cd2 2010080
(1) 20100801-rev124-test2
(2) 20100801-rev124-test1
(3) 20100802-rev126-bar

番号を入力して選択できます。


うーん、ソリューションでbashスクリプトなどを考え出す必要がない限り。
-dehmann

ブックマークとターミナル統合を備えた適切なファイルマネージャーを使用します。また、「..」のエイリアスを作成して親ディレクトリに移動するため、「cd ..」と入力する必要はありません。そして、入力を節約するためにシンボリックリンクを作成します。
ネオニー

@neoneye:ブックマークとターミナル統合を備えたファイルマネージャがいいでしょう。見つかりません。リンクはありますか?
-dehmann

1
私はMacを使用します。しかし、Linuxで利用できる可能性が最も高いいくつかのファイルマネージャー、Dolphin、Worker。テキストモードには、Midnight Commanderがあります。
ネオニー

alias rotd='pushd -0'次に、rotdディレクトリスタックの回転に使用します。
ctrl-alt-delor

回答:


3

このdirs -vコマンドは、各ディレクトリの前に番号付きのディレクトリスタックをリストします。コマンドに番号引数を与えて、pushdそのディレクトリにジャンプさせることができます。たとえば、dirs -v変更したいディレクトリがその2前にある(つまり、リストの3番目のディレクトリである)ことpushd +2を示している場合、実行するとそのディレクトリに変更されます。

入力を節約するために、これらのコマンドに次のようなエイリアスを付けることで短縮できます。

alias dv="dirs -v"
alias pd=pushd

2

ワイルドカードを使用できます:

cd ../*test1 or even cd *t1
cd ../2010*test2
cd ../*bar

それらははるかに柔軟性があり、さまざまな状況ごとにスクリプトを計画する必要はありません。慣れたら、あらゆる種類のディレクトリにスクリプトを使用します。例:

cd /e*/n*k will take you to /etc/network
cd /h* to /home

それらはどこでも使用できます(lsもちろん、何を表示するかをフィルタリングできます)

bashワイルドカード


これは、globが一致するファイルパターンの数に応じて、有用な場合とそうでない場合があります。あなたが/hard_diskその後持っている場合cd /h*はあまり有用ではありません。
リッチホモルカ

確かに、これらのコマンドを頻繁に使用すると、一致するものがすぐに見つかり、ほとんどの場合、完全な入力よりも短くなり、リンクで他のワイルドカードを使用できます。あなたの例ではcd /ho*、はい、はい...これは最高ではないことに同意します!:)しかし、これははるかに例外であり、彼のディレクトリ名が長いため、OPの場合ではありません
ローレント

1
  1. histコマンドを使用して、実行したすべてのコマンドの履歴を表示してみてください。
  2. 頻繁にcdするディレクトリごとに、cdコマンドを使用してシェルスクリプトを作成します。

1
  • タブ補完
  • 履歴アクセス(特に、矢印キーアクセスを提供するシェルで)
  • bashでは、との使用popdを検討してくださいpushd

ありがとう!どのシェルが矢印キーアクセスを提供しますか?
-dehmann

1
バッシュ、tcsh。たぶんzsh。おそらく他のいくつか。試してみてください。それでも解決しない場合は、ドキュメントを確認してください。「history」および場合によっては「readline」を検索します。
dmckee

ああ、あなたは矢印キーで前のコマンドにアクセスすることを意味します。さて、私はそれをbashで使用しています。矢印キーを使用してタブ補完候補の1つにアクセスすることを意味すると思いました。
-dehmann

1
十分に新しいbashesはC-r、インクリメンタル履歴検索などの他のreadline機能もサポートします。すべてのシェルが異なるため、ドキュメントはあなたの友人です。
dmckee

1
私は何年もbashを使用してきましたがC-r、ここ数か月で発見されたばかりです。それは素晴らしいことです。
ダグ・ハリス

1

このような質問では、どのシェルを使用するかについて言及したいと思います。各シェルにはわずかに異なるツールがあります。ここでの私の答えはbashに当てはまります。bashはおそらくあなたが使用しているものです。

また、「Frank Computer」では、シェルスクリプトを使用できません。独自のプロセスを作成し、そのプロセスでcdを実行して終了します。現在のシェルは現在の場所にあります。

「エイリアス」はあなたの友達だと思います。次のようなものを追加します。

alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2'

.bashrc(または.kshrc、またはzshrc)

bashにはenv varもありCDPATHます。これは相対パスにcdするためのアンカーとして使用できます。例えば:

CDPATH=/usr:.; cd bin

があることを確認し、そこ/usr/binにあなたを置き、そうでなければ、あなたを置きます./bin。これはおそらく役に立たないでしょう。なぜなら、これが機能するにはサブディレクトリ全体をタイプする必要があるからです:

CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2

Methinksエイリアスは、少なくともbashで入手できる最高のものです。zshにはもっと良いツールがあるかもしれません。


ここではスクリプトが最良の方法ではないと思いますが、スクリプトを使用してディレクトリを変更し. my_cd_script、それを呼び出してcdスクリプトにコマンドを入れると、ディレクトリを変更できます。
ローレン

1

真夜中の司令官mc)は、端末ベース(文字モード)のファイルマネージャーです。ホットリスト機能を使用すると、頻繁に使用するディレクトリのリストにディレクトリを追加し、cdするリストからディレクトリを選択できます。また、mcコマンドラインでコマンドを入力しているときでも、完全なディレクトリに入力してcdできるクイックcd機能があります。通常のファイルマネージャーナビゲーションも実行できます。

もう1つのキーストロークセーバーは、シェルのCDPATH変数を使用することです(ほとんどのシェルで使用可能です)。

CDPATH=/some/top/dir:/another/one
cd foo

「foo」が現在のディレクトリに存在する場合、そこcdに移動します。そうでない場合は、ディレクトリを検索CDPATHし、最初に見つかった「foo」に移動します。




0

ancは、そのユースケースに合わせて設計されました。

https://github.com/tobimensch/anc

README.mdからの抜粋を次に示します。

例:#現在のディレクトリをデフォルトのアンカーにします:$ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

完全な開示:私はancの著者です


0

cd -特に2つのディレクトリ間を移動するのに多くの時間が費やされる場合、タイピングが大幅に削減されることがわかりました。cd -前のディレクトリに変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.