
私は通常同じサーバー上の複数のフォルダ(dev1
、、、および)でdev2
作業します。dev3
フォルダ構造は次のとおりです。
/var/www/html/dev1/a/b/c/d/e/f
/var/www/html/dev2/a/b/c/d/e/f
/var/www/html/dev3/a/b/c/d/e/f
c
特定のフォルダ(またはd
またはe
of)にいるときに/var/www/html/dev3/
私を連れて行くコマンドはありますか/var/www/html/dev3/a
?
フォルダまたは/var/www/html/dev1/a
。c
d
e
/var/www/html/dev1/
答え1
方法#1 - 相対CD
現在の位置から特定の深さに移動する最も簡単な方法は、次のコマンドを実行することです。
$ pwd
/Users/sammingolelli/adir/dev3/a/b/c/d/e/f
$ cd ../../../../..
$ pwd
/Users/sammingolelli/adir/dev3/a
方法 #2 - pushd/popd
これに加えて、pushd
およびをpopd
スタックとして使用してFIFOまたはディレクトリに移動し、スタックから以前にプッシュされたディレクトリに戻るpushd
ときに通知するFIFOまたはディレクトリを維持することもできます。popd
$ pwd
/Users/sammingolelli/adir/dev3/a
$ dirs
~/adir/dev3/a
$ pushd b/c/d/e/f/
~/adir/dev3/a/b/c/d/e/f ~/adir/dev3/a
$ pwd
/Users/sammingolelli/adir/dev3/a/b/c/d/e/f
$ popd
~/adir/dev3/a
$ pwd
/Users/sammingolelli/adir/dev3/a
方法 #3 - エイリアス
必要なタスクを実行するためにエイリアスを作成することもできます。この問題に対処する複数のQ&Aがすでにサイトにある場合、または@fastrizwaanの回答をご覧ください。
方法 #4 - CDPATH
この答えを見てください@スタッフ、このQ&Aについて: 端末でのクイックディレクトリのナビゲーション。
さらに、ツールを使用しますか?
上記の2つの方法は、最も一般的に使用される移動方法です。もちろん、他のツールをナビゲーションツールとしてインストールすることもできます。これらのツールはこのサイトでたくさん議論されています。お気に入りの1つは、特定のディレクトリを「ブックマーク」し、短い名前にマッピングしてどこでも簡単に変更できるようにするブックマークツールです。
自動ジャンプ私はこのQ&Aでそのようなツールの1つについて議論します。短いパスを作成するには?。ツールが呼び出されます。自動ジャンプ。
他の人次のタイトルのQ&Aに提案されているいくつかの異なる点があります。端末でのクイックディレクトリのナビゲーション。
答え2
これは機能的な作業です。シェルがbashであると仮定すると、.bashrc
この機能は次にbashを起動するときに使用できます。
cdwww () {
…
}
何をすべきですか…
?注文でなければなりませんcd
。現在のディレクトリへのパスは変数にありますPWD
。文字列処理そして他の構造。
/var/www/html
たとえば、現在のディレクトリが下にある場合、次の関数は現在のディレクトリより1レベル上のディレクトリに移動します/var/www/html
。
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
この関数は他のサブディレクトリへのパスを許可することができます/var/www/html/dev*/a
。
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}/$1"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
別の方法は、ディレクトリを変更するたびにターゲットディレクトリに変数を設定することです。次のコードは、chpwd
現在のディレクトリが変更されるたびにこの関数が実行されるようにスケジュールします。
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
html_root="${PWD%"$d"}"
else
unset html_root
fi
}
その後、次のものを使用できますcd $html_root
(または$html_root
オンの場合shopt -s autocd
)。
答え3
今、あなたの質問を理解します。
cd $(pwd|cut -c 1-18)/a
/var/www/html/dev1/a
あなたが下や中にいるとき、dev1
下/var/www/html/dev2/a
や中にいるときdev2
などにあなたを連れて行きます。
cut
ここにハッキングがあるようです。18
パスが変更されたら変更する必要がありますが、正規表現を使用するよりエレガントなソリューションを見つけることができませんでした。
答え4
存在するzsh
:
cd $PWD[1,(rn[5])/]
最初の文字でcd
部分文字列を開始し、$PWD
最初の文字の発生で終わります。したがって、次のようになります。1
5
/
1 2 3 4 5 /var/www/html/dev1/a/b/c/d/e/f
それでは一つになりますcd /var/www/html/dev1/
。
ヘルパー関数を作成できます。
cdd() cd $PWD[1,(rn:argv[1]:)/]
たとえば、引数として与えられたepth内でcd
。$PWD
d
cdd 5