Command
快速將目錄更改為類似的目錄結構?
在測試環境中,我們有一個日誌文件的目錄結構,如下所示:
/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 "$@" }