cd <directory>
を使用すると、ディレクトリが存在する場合はそれが開かれることがわかっています。
また、cd ..
は現在の作業ディレクトリから1レベル上に移動します。
しかし、/home/thina/teams/td/tech/app/release/apks
のような長いパスを持つネストされたディレクトリがある場合、フォルダーapks
に移動するのは面倒であり、また別のノードに戻ることは困難です。たとえば/home/thina/teams
。
cd
とcd ..
の入力をスキップする方法はありますか? Ubuntu 16.04を使用しています。
pushd
とpopd
があります。
pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command
その他のオプションについては、help pushd
およびhelp popd
を試してください。 man
およびpushd
はbash組み込みコマンドであるため、popd
ページはありません。
すでに提供されている非常に良い回答に加えて、cd
を効果的に使用するためのヒントを以下に示します。
cd -
は、最後にいたディレクトリに戻ります。cd ../../..
は3レベルを一度に表示します。..
表記法を一緒に使用して、好きなだけディレクトリを「移動」できます。cd ..
を使用し、矢印キーを押してコマンドを再度使用することでbash履歴を使用します。~
を使用して現在のユーザーのホームディレクトリに代わってください。ユーザーthinaとしてログインしている場合、cd ~/teams
は/home/thina/teams
に移動します。cd
コマンドのパスのセクションを補完します。 Tab、他に有効な選択肢がない場合、そのセグメントは完了します。たとえば、cd /home/thina/teams/td/t
と入力してから押した場合 Tab、tdディレクトリに文字tで始まる他のファイルまたはディレクトリが存在しない限り、Word techが自動的に入力されます。これらのヒントを一緒に使用すると、cd
を使用してディレクトリを移動する際の痛みがはるかに少なくなります。
ツリーを一度に複数のレベルに移動するには、次の機能を使用できます(拡張バージョンのmuruに感謝します)。
up ()
{
local old="$PWD"
for i in $(seq "${1:-1}"); do
cd ..
done
OLDPWD="$old"
}
その後、次のことができます。
$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams
さらに:
up
を呼び出すことは、cd ..
が設定されている場合は${1:-1}
を、そうでない場合は$1
を置き換えるため、1
と同等です。cd ..
の後にOLDPWDを設定することは、通常のcd -
動作を維持することを目的としています。長いディレクトリ名の場合は、フルパスで変数を使用します。例えば、
APKS="/home/thina/teams/td/tech/app/release/apks"
その後、あなたはただcd "$APKS"
をすることができます
X個のディレクトリに移動する場合、.bashrc
でこの関数を定義しています
goup() # go up x number of dirs
{
num=$1
while [ $num -ne 0 ];do
cd ..
num=$( expr $num - 1 )
done
}
apks
から/home/thina/teams
に戻るには
goup 6
使用例を次に示します。
$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$>
私が思いついたもう1つの小さな関数は、bookmark
関数です。
仕組みは次のとおりです。現在のフォルダーをファイルに保存し、そのファイルの行番号に基づいて特定のディレクトリに移動できます。例:
$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks )
$> pwd
/sys/class/backlight
そして、ここに関数自体があります:
bookmark()
{ # bookmarks current dir
pwd >> $HOME/.dirsbookmarks
}
UPDATE:autojump
よりもさらに強力なツールがあります: fasd
ですが、私はそれをよく知りません。
誰も言及していないことに驚いています autojump
コマンドラインから最も頻繁に使用するディレクトリのデータベースを維持することで機能します(ジャンプする前に、まずディレクトリにアクセスする必要があります)
基本的に@graipherが構築したもので、いくつかの追加オプションがあります。
私が持っているように 言及 別の質問で:
ディレクトリに数回cdした後(1回で十分です):
cd /home/thina/teams/td/tech/app/release/apks
現在のディレクトリに関係なく、ショートカットj
を使用してすばやく移動できます。
j apks
リストの最上位である限り、パスのどの部分でも機能します。j app
よりも何度も行った場合は、.../apks
も.../app
に移動します。
適切にメンテナンスされ、Ubuntu向けに配布されており、jump to childなどのその他の便利な機能を備えているため、独自のスクリプトを使用する代わりに推奨します。
.../td/tech $ jc apk
.../release/apks $
別のツリーの下の他のapks
ではなく、td
のapks
に移動しました。
autocd
オプション (shopt -s autocd
)をオンにして、cd
を入力する必要がないようにします。たとえば、親ディレクトリに移動するには、2文字のコマンド..
が必要です。
2つのディレクトリ間を移動する場合、cd -
を使用してそれらを切り替えることができます。これにより、前の作業ディレクトリに移動します。 autocd
オプションは-
を実行cd -
しませんが、そのためのエイリアスまたは関数を定義できます。
ビルトイン pushd
および popd
を使用して、スタック上のディレクトリを記憶できます。組み込み dirs
は、ディレクトリスタックをリストします(dirs -v
の方が読みやすいと思います)。
特定のディレクトリのサブディレクトリに頻繁に変更し、これらのサブディレクトリの名前がかなり一意である場合は、それらを CDPATH
変数に追加します。ただし、CDPATH
が実際に便利な状況を見つけたことがないことに注意してください。
変数をディレクトリ名に設定し、$foo
を使用して変数に変更できます。
Zsh にはbashにはない素敵な機能がいくつかあります。それらのいくつかは、同じ仕事をする関数を書くことでエミュレートできます。特に、cd
の2つの引数の形式を使用すると、類似の名前を持つ別のディレクトリに簡単に変更できます。 /home/thina/teams/td/tech/app/release/apks/com.acme/v1
から、cd release beta
を実行すると、/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
に移動します。
エイリアスを介して直接利用できる頻繁に使用されるディレクトリのリストがあります。これには、階層の上のディレクトリへのショートカットも含まれます。
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University
さて、3レベル上に移動したいときは、....<Enter>
と入力するだけです。
UnixSEで related の質問にすでに答えたので、z [github] というスクリプトを使用します。
Cdしたディレクトリを記憶し、頻度(頻度+最新性)に従ってランク付けし、その名前の一部を使用して記憶されたパスの1つに変更できるようにします。
少なくとも1回はディレクトリにcdした後、次の代わりに実行できます。
$ cd ~user/very/long/path/with/many/subfolders/
ただやる:
$ z sub
部分的な名前の一致を使用して機能します(パスにsubという用語を含む他のディレクトリがなく、周波数が高い場合)。
また、最初に通常のcdを試行し、失敗した場合はzを使用するこのような関数を定義しました。
function cd() {
builtin cd "$1" 2> /dev/null || z "$1" || (echo "cd: File or Directory not found: $1" >&2 && exit 1)
}
これにより、両方の利点が得られます。フォルダーが現在のディレクトリにある場合、または有効なフルパスが指定されている場合は、そこにcdしますが、そうでない場合はデータベース内で一致するものを見つけてそこにcdします。これにより、cdを使用して(データベースをトレーニングし、これまでに行ったことのないフォルダーに移動する)場合によってはzを使用することを覚えている(小さな)痛みがなくなります。
コマンドpushd
とpopd
は私のお気に入りです。 pushd
コマンドは、訪問したディレクトリを記憶し、dirs
コマンドで表示できます。逆方向にジャンプする準備ができたら、popd
を使用して戻ります。
次に、bash関数とエイリアスを使用した例を示します。
sd ()
{
pushd "$1" > /dev/null
}
po ()
{
popd
}
alias d='dirs'
これらのコマンドをさまざまな方法で常に使用しています。
頻繁にアクセスされるディレクトリの別のオプションは、cd
またはpushd
コマンドを単にエイリアス化することです。だから、あなたの投稿から例を使用して:
alias cdapks='cd /home/thina/teams/td/tech/app/release/apks'
alias cdteams='cd /home/thina/teams'
2つのアイデアを組み合わせると、次のようになります。
alias sdapks='sd /home/thina/teams/td/tech/app/release/apks'
alias sdteams='sd /home/thina/teams'
これにより、ディレクトリを走査する際の柔軟性が大幅に向上します。 Desktop
、Documents
、Music
、Downloads
などのように、cd***
およびsd***
エイリアスを手元に置いておくと非常に便利です。 !
私がうまくいくと思う3つのオプションがあります(将来的には pushd
moreを使用するかもしれませんが、私はそれについて学んだだけです):
そもそもcd
が深くネストされたディレクトリに移動する必要がないようにパスを調整します。そうすることで、頻繁にアクセスする必要がある場所をすぐに確認できます。これを達成する方法は、symlinksを使用することです:明示的で十分に階層化されたディレクトリをそのまま保持しますが、あなた自身の便宜のためにクイックアクセスリンクを作成します。
ln -s ~/teams/td/tech/app/release/apks ~/apks
次に、cd
への長いパスを入力する代わりに、cd ~/apks
、およびcd ../teams
(または、この例では~/teams
)を使用して戻ります。
単一のシェルを使用せず、パス間でcdを行ってはいけませんが、作業する必要のあるパスごとに1つのシェルを実行し続けてください。このマルチタスクを実現する複数のレベルがあります。
tmux
のような端末マルチプレクサを使用します。cd
sを使用してフォルダーに移動し、そこで1つのことを実行して、すぐに元のフォルダーの制御を戻す単一目的のコマンドでアクションを起動するだけです。
$ cd /home/thina/teams/td/tech/app/release/apks
$ some_command this_file_here
$ cd ../../../../..
単にワンライナーを行う
$ (cd ~/teams/td/tech/app/release/apks; some_command this_file_here)
または同等に
$ sh -c 'cd ~/teams/td/tech/app/release/apks
> some_command this_file_here'
cd
ではなくではなく、ホームディレクトリからコマンドを実行するだけです。 ブレース展開はここで大いに役立ちます:代わりに
$ cd /home/thina/teams/td/tech/app/release/apks
$ some_command this_file_here other_file_also_apks
$ cd ../../../../..
できるよ
$ some_command ~/teams/td/tech/app/release/apks/{this_file_here,other_file_also_apks}
魚には、素早く移動するためのいくつかの素晴らしい施設があります。
また、お気に入りのディレクトリを〜/ fにシンボリックリンクしているため、〜/ f/xをcdして〜/ foo/bar/baz/experimental-dataにアクセスできます。
試してみてください z.lua -習慣を学習することで、より速くナビゲートするのに役立つ新しいcdコマンド。
fooを含むディレクトリへのcd:
z foo
fooで終わるディレクトリへのcd:
z foo$
複数の引数を使用します。
次のデータベースを想定します。
10 /home/user/work/inbox
30 /home/user/mail/inbox
"z in"
は、重みの高いエントリとして/home/user/mail/inbox
にcdします。ただし、z.luaに複数の引数を渡して、別のエントリを優先させることができます。上記の例では、"z w in"
はディレクトリを/home/user/work/inbox
に変更します。
インタラクティブな選択を含むcd:
複数の一致が見つかった場合、z -i
を使用するとリストが表示されます。
$ z -i soft
3: 0.25 /home/data/software
2: 3.75 /home/skywind/tmp/comma/software
1: 21 /home/skywind/software
> {CURSOR}
次に、番号を入力し、実際のcdの前に行く場所を選択できます。例えば。 /home/data/software
にcdするために3を入力します。そして、単にENTERを押して何も入力しなければ、終了し、あなたがいた場所に留まります。
z.lua
は、対話型の選択または引数補完のためにfzf
もサポートしています。
cd ../../..
を入力せずに親にすばやく戻る:
新しいオプション"-b"
は、「cd ../../ ..」を冗長に入力する代わりに、bashの特定の親ディレクトリにすばやく戻ることができます。
(引数なし):cd
はプロジェクトルートに、プロジェクトルートは.git
/.hg
/.svn
を含む最も近い親ディレクトリになります。
(1つの引数):cd
キーワードで始まる最も近い親に、見つからない場合は、キーワードを含む親に移動します。
(2つの引数):最初の値を(現在のパスの)2番目の値に置き換えます。
...
z -b
をzb
にエイリアスすることから始めましょう。
# go all the way up to the project root (in this case, the one that has .git in it)
~/github/lorem/src/public$ zb
=> cd ~/github/lorem
# cd into to the first parent directory named g*
~/github/vimium/src/public$ zb g
=> cd ~/github
# substitute jekyll with ghost
~/github/jekyll/test$ zb jekyll ghost
=> cd ~/github/ghost/test
それがあなたのニーズに合うことを望みます。