Ubuntu下使用up命令替代cd ../../一次性回退多级目录

导读:本篇文章讲解 Ubuntu下使用up命令替代cd ../../一次性回退多级目录,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

介绍

cd命令是我们在Ubuntu终端中使用频率非常高的一个命令,我们常用cd命令实现不同路径下的跳转功能。但大家在使用过程中有没有发现如果你cd到某个比较深的路径下时,又想回退到上三级目录时,你就得写:

cd ../../../

如果你需要退回的层级越多,那么你就得写更多个../,是不是感觉非常麻烦,也不够优雅?

确实,有人也想到了这个问题,并写了一个up脚本,可以用来实现快速回退指定层级目录,并带有Tab键提示功能,简直不能再好用了!

下面就来介绍下如何配置这个脚本并使用。

步骤

安装过程

1、打开此链接,复制其中的脚本内容
为防止该链接失效,我把该链接中的内容复制在此:

#!/usr/bin/env sh

# up.sh: Quickly traverse up the current working path.
# Author: Shannon Moeller <me@shannonmoeller.com>
# Source to use: [ -f /path/to/up.sh ] && . /path/to/up.sh

__updir() {
	if [[ "$1" == "/" || -z "$1" || -z "$2" ]]; then
		return
	fi

	local p="$(dirname "$1")"
	local a="$(basename "$p")"
	local b="$(basename "$2")"

	if [[ -z "$a" || -z "$b" ]]; then
		return
	fi

	if [[ "$a" == "$b"* ]]; then
		echo "$p"
		return
	fi

	__updir "$p" "$2"
}

__upnum() {
	if [[ -z "$1" || -z "$2" || ! "$2" =~ ^[0-9]+$ ]]; then
		return
	fi

	local p="$1"
	local i="$2"

	while (( i-- )); do
		p="$(dirname "$p")"
	done

	echo "$p"
}

_up() {
	local p="$(dirname $PWD)"
	local w="${COMP_WORDS[COMP_CWORD]}"

	COMPREPLY=( $(IFS=';' compgen -S/ -W "${p//\//;}" -- "$w") )
}

up() {
	# up one
	if (( ! $# )); then
		cd ..
		return
	fi

	# up dir
	local d="$(__updir "$PWD" "$1")"

	if [[ -d "$d" ]]; then
		cd "$d"
		return
	fi

	# up num
	local n="$(__upnum "$PWD" "$1")"

	if [[ -d "$n" ]]; then
		cd "$n"
		return
	fi

	# fallback
	if [[ $1 == - || -d $1 ]]; then
		cd $1
		return
	fi

	# usage
	echo -e "usage: up [dir|num|-]\npwd: $PWD"
}

# zsh compatibility
if [[ -n ${ZSH_VERSION-} ]]; then
	autoload -U +X bashcompinit && bashcompinit
fi

# tab-completion
complete -o nospace -F _up up

2、新建一个目录并创建一个up.sh文件
我一般新建一个up目录在~/.config目录下:

mkdir ~/.config/up

然后新建一个up.sh文件

touch up.sh

将上述的脚本内容拷贝到该文件中。

3、将脚本文件添加至~/.bashrc

echo 'source ~/.config/up/up.sh' >> ~/.bashrc

4、执行source ~/.bashrc

至此你就已经配置好up脚本,可以使用up命令自由回退目录。

使用示例

例如我现在cd到一个长路径下:

$ pwd
/home/zhanghm/Programming/programming-learning-examples/C++/C_test/utils

我想回退到Programming这一级目录,这个时候你就不用cd ../../...来跳转了,直接执行:

up Programming

并且你会发现在执行up命令时支持Tab键补全,非常好用!

【参考】
1、https://segmentfault.com/a/1190000022785900
2、https://www.myoschain.com/blog/153013929742696448

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121217.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!