Shell - 向上导航“n”个目录

Mik*_*eds 32 command-line

我经常发现自己在执行这样的命令

cd ../../../../../
Run Code Online (Sandbox Code Playgroud)

有没有我可以使用的快捷方式可以 cd ../ n 次

ter*_*don 38

不,没有现成的命令,但写一个是微不足道的。将这些行添加到您的~/.bashrc文件中(感谢 D. Ben Knoble指出变量应该是local):

function ncd(){
  local path=""
  for ((i=1;i<=$1;i++)); do
    path="../$path"
  done
  echo "Moving to $path" >&2
  cd "$path"
}
Run Code Online (Sandbox Code Playgroud)

保存文件,打开一个新终端,您现在可以使用ncd N. 例如:

$ pwd
/home/terdon/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
$ ncd 5
Moving to ../../../../../
$ pwd
/home/terdon/dir1/dir2/dir3/dir4
$ ncd 2
Moving to ../../
$ pwd
/home/terdon/dir1/dir2
Run Code Online (Sandbox Code Playgroud)


小智 15

来自 Windows 世界,Alt + Up Arrow 导航到 Windows 资源管理器中的父目录。所以我做了这样的事情~/.inputrc

"\33\33[A": "cd ..\n"
Run Code Online (Sandbox Code Playgroud)

然后按 Alt + Up Arrow 移动到终端中的父目录。当然你必须多次按下才能移动得更高,但我发现它非常快。您也可以根据自己的喜好更改快捷方式。


egm*_*ont 14

您可以轻松创建别名或 shell 函数来执行给定的任务。我个人使用这些:

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
Run Code Online (Sandbox Code Playgroud)

等等,在我的.bashrc.

shell 函数可以轻松地接受一个数字参数,并cd ..在循环中执行多次。


D. *_*ble 6

类似于@terdon 的回答,使用和输出稍微更自然:

# go up
up() {
  local count="${1:-1}"
  local path=../
  while (( --count > 0 )) ; do
    path="$path"../
  done
  echo "cd -- $path"
  cd -- "$path"
}
Run Code Online (Sandbox Code Playgroud)

这定义了一个函数up,它具有以下属性:

  • up n将上n目录
  • up将正好上一个目录(即,默认为n1)
  • 输出模仿使用时的shopt -s autocd(因此在--技术上是不必要的)
  • 和以前一样,OLDPWD被正确设置为 的当前值PWD,而不是中间目录之一。这意味着它up 5; cd -按预期工作。