Command

快速將目錄更改為類似的目錄結構?

  • June 10, 2015

在測試環境中,我們有一個日誌文件的目錄結構,如下所示:

/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

如果沒有這樣的命令,我可以設置一個別名來有效地做同樣的事情嗎?那看起來怎麼樣?

謝謝你的幫助!

在 zsh 中,cdswap是…… cd。當給定兩個參數時,cd用目前目錄中的第二個參數替換第一個參數並更改到結果目錄。

您可以通過創建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 "$@"
}

引用自:https://unix.stackexchange.com/questions/208824