Bash

如何在一個命令中將文件複製到目標文件夾並 cd 到目標文件夾

  • September 17, 2019

為了解釋我的問題,這是我做事的愚蠢方式:

cp fileFromMyFriend.txt ~/my_first_subfolder/my_second_subfolder/more_subfolders
cd ~/my_first_subfolder/my_second_subfolder/more_subfolders

將這兩行合二為一的捷徑是什麼?我不是在尋找連接符號,例如 & 或 ;

相反,我試圖避免重新輸入我很長的文件夾路徑。

(我已經瀏覽了 cp 手冊頁,並在來到這里之前用不同的措辭搜尋了這個問題)

我只回答你的這個問題:Rather I'm trying to avoid retyping my very long folder path.

如果這就是你想要做的,你可以這樣做:

cp fileFromMyFriend.txt ~/my_first_subfolder/my_second_subfolder/more_subfolders
cd !$

如果這是用於互動式使用:鍵入並正常執行第一個命令。然後鍵入cd Space M-.(您可以鍵入M-.asEsc .或 as Alt+ .)。鍵盤快捷鍵M-.( yank-last-arg) 插入前一個命令的最後一個單詞。

如果這是用於腳本:將目錄名稱放入變數中。使用變數時不要忘記雙引號。

target_dir=~/my_first_subfolder/my_second_subfolder/more_subfolders
cp fileFromMyFriend.txt "$target_dir"
cd "$target_dir"

如果您發現您經常使用相同的命令序列,請定義一個函式。下面的 bash 函式呼叫cp並將最後一個參數視為要更改到的目錄。如果最後一個參數不是目錄或目錄的符號連結,它會更改為包含最後一個參數的目錄。這適用於大多數使用方式cp,但不適-t用於 GNU 選項cp

cp_cd () {
 cp "$@"
 if [ -d "${!#}/." ]; then
   cd -- "${!#}"
 else
   cd -- "$(dirname -- "${!#}")"
 fi
}

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