ディレクトリを同様のディレクトリ構造にすばやく変更しますか?

ディレクトリを同様のディレクトリ構造にすばやく変更しますか?

テスト環境では、ログファイルのディレクトリ構造は次のとおりです。

/var/Logs/int/app-id/region-code/log/file-name.log
/var/Logs/sat/app-id/region-code/log/file-name.log
/var/Logs/cat/app-id/region-code/log/file-name.log

環境ごとに多くのアプリケーションIDがあり、アプリケーションIDごとに複数の地域コードがあります(アプリケーションによって異なります)。

ディレクトリをintからsatに変更し、パスの残りの部分をすべて同じに保つことができるコマンドはありますか?このように:

$ pwd
/var/Logs/int/abc/01/log
$ cdswap int sat
$ pwd
/var/Logs/sat/abc/01/log
$ cdswap abc def
$ pwd
/var/Logs/sat/def/01/log

これがうまくいけばいいでしょう。

$ cdswap def/01 ghi/02
$ pwd
/var/Logs/sat/ghi/02/log

そのようなコマンドがない場合は、同じ操作を効果的に実行するようにエイリアスを設定できますか?どうですか?

ご協力ありがとうございます!

答え1

cdswapzsh では、cd.... 2 つの引数が指定されたら、cd現在のディレクトリの最初の引数を 2 番目の引数に置き換え、結果ディレクトリに変更します。

cd関数を作成してbashでこれをシミュレートできます。

cd () {
  local i=1
  while [[ "${!i}" = -* ]]; do ((++i)); done
  if ((i == $# - 1)); then
    local operands
    operands=("$@")
    operands[$i]=${PWD/${!i}/${!#}}
    if [[ "${operands[$i]}" == "$PWD" ]]; then
      echo >&2 "cd: string not in pwd: ${operands[$i]}"
      return 1
    fi
    set -- "${operands[@]:$(($#-1))}"
  fi
  builtin cd "$@"
}

答え2

このシェル機能を使用すると、bash必要に応じて機能します。pwd;新しいディレクトリの場所の更新が目立たないようにするには、削除してください。

cdswap() { cd "${PWD/$1/$2}"; pwd; }

はい

$ cd /usr/local/src
$ pwd
/usr/local/src
$ cdswap src bin
/usr/local/bin
$ pwd
/usr/local/bin
$ cdswap local/bin src
/usr/src

答え3

以下を試してください。

cd $(echo $PWD | sed 's/abc/def/')

これらのコマンドをエイリアスに設定すると、レースが始まります。

交換したいファイルを交換できるようにすることもできます。

function cdswap() {
  cd $(echo $PWD | sed 's/$1/$2/')
}

次に、その機能を.bash_profileに入れます。

関連情報