サブディレクトリを一覧表示せずにparent1/suba/subからparent2/suba/subにCDを移動するには?

サブディレクトリを一覧表示せずにparent1/suba/subからparent2/suba/subにCDを移動するには?

その下に同じファイル構造を持つ複数の親ディレクトリがあります。

例:

parent1/suba/subb/
parent2/suba/subb/

私はそこにいる間そのようなことをしないparent1/suba/subbことに変わりたかったです。すべてのサブディレクトリとリストを一覧表示せずにこれを行うにはどうすればよいですか?parent2/suba/subbcd ../../../parent2/suba/subb../

ベストアンサー1

あなたはそれを使用することができますPWD変えるそしてパラメータ拡張現在のディレクトリにテキスト変換をすばやく適用するように設定されています。

cd ${PWD/parent1/parent2}

これはパスコンポーネントである必要はなく、任意の部分文字列にすることができます。たとえば、パスが実際にparent1aで、parent2パスの左側に文字がなくなった場合は、この方法を使用できます。検索文字列には複数のパスコンポーネントを含めることができますが、スラッシュをエスケープする必要があります。たとえば、fromからtoに移動するには、を使用します。もっと正確に言えば、その部分がシェルワイルドカードパターンなので。1cd ${PWD/1/2}~/checkout/trunk/doc/frobnicator/widget~/checkout/bugfix/src/frobnicator/widgetcd ${PWD/trunk\/doc/bugfix/src}parent1cd ${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で実装することは、読者の練習課題として残されています。

おすすめ記事