その下に同じファイル構造を持つ複数の親ディレクトリがあります。
例:
parent1/suba/subb/
parent2/suba/subb/
私はそこにいる間そのようなことをしないparent1/suba/subb
ことに変わりたかったです。すべてのサブディレクトリとリストを一覧表示せずにこれを行うにはどうすればよいですか?parent2/suba/subb
cd ../../../parent2/suba/subb
../
ベストアンサー1
あなたはそれを使用することができますPWD
変えるそしてパラメータ拡張現在のディレクトリにテキスト変換をすばやく適用するように設定されています。
cd ${PWD/parent1/parent2}
これはパスコンポーネントである必要はなく、任意の部分文字列にすることができます。たとえば、パスが実際にparent1
aで、parent2
パスの左側に文字がなくなった場合は、この方法を使用できます。検索文字列には複数のパスコンポーネントを含めることができますが、スラッシュをエスケープする必要があります。たとえば、fromからtoに移動するには、を使用します。もっと正確に言えば、その部分がシェルワイルドカードパターンなので。1
cd ${PWD/1/2}
~/checkout/trunk/doc/frobnicator/widget
~/checkout/bugfix/src/frobnicator/widget
cd ${PWD/trunk\/doc/bugfix/src}
parent1
cd ${PWD/tr*c/bugfix/src}
存在する扱いにくい、より短い構文を使用できますcd parent1 parent2
。同様に、パス内のすべての部分文字列を置き換えることができます(ここではワイルドカードパターンではなく正確に部分文字列です)。
Bashでも同様の機能を実装できます。
cd () {
local options
options=()
while [[ $1 = -[!-]* ]]; do options+=("$1"); shift; done
if (($# == 2)); then
builtin cd "${options[@]}" "${PWD/$1/$2}"
else
builtin cd "${options[@]}" "$@"
fi
}
Zshは2番目のパラメータの完成機能を提供します。これをBashで実装することは、読者の練習課題として残されています。