テスト環境では、ログファイルのディレクトリ構造は次のとおりです。
/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
cdswap
zsh では、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に入れます。