当我想上一个目录时,我使用
cd ..
但是,当我想向上 7 个目录时,除了键入七 (7) 次之外,还有什么方法可以做到这一点cd ..
?
cd ../../../../../../../
另外一个有用的导航提示是,例如,假设您不断从一个目录(称为 A)切换到另一个目录(称为 B),在您的情况下,它有 7 个目录。
因此,如果您在目录 A 中:
A> cd ../../../../../../../
B> // Now you're in directory B and want to go back to A
B> cd -
这将直接移回目录 A。-
展开到您所在的上一个目录。
制作别名(在你 ~/.bashrc 中)
function cd_up() {
cd $(printf "%0.0s../" $(seq 1 $1));
}
alias 'cd..'='cd_up'
并使用:
$ cd.. 7
UPD: 或制作更强大的变体,cd 到当前路径中的目录名称:
# cd up to n dirs
# using: cd.. 10 cd.. dir
function cd_up() {
case $1 in
*[!0-9]*) # if no a number
cd $( pwd | sed -r "s|(.*/$1[^/]*/).*|\1|" ) # search dir_name in current path, if found - cd to it
;; # if not found - not cd
*)
cd $(printf "%0.0s../" $(seq 1 $1)); # cd ../../../../ (N dirs)
;;
esac
}
alias 'cd..'='cd_up' # can not name function 'cd..'
利用:
$ cd /home/user/documents/projects/reports/2014-10-01
$ cd.. doc
$ pwd
> /home/user/documents
您可以使用pushd .
记住一个目录并popd
返回到它。
如果有一个我经常使用的命令,我只会创建一个别名。
你可以输入
alias ..='cd ..'
alias ...='cd ../..'
然后你可以只使用..
上一级和...
上两级。
这是我发现的一个小改进:
通常,当您使用 cd .. 后退一个目录时,您最终会前进一个目录。为了使这项工作,您必须使用函数而不是别名,所以而不是:
alias ..=”cd ../”
alias ..2=”cd ../../”
您可以使用:
..()
{
cd ../$@
}
..2()
{
cd ../../$@
}
但是,在使用它之后,您很快就会发现您缺少此功能的命令完成功能,这使得它的用处远没有它可能的用处。因此,我回去为这个函数添加了我自己的 bash 补全函数,如果你想避免的话,可以将其粘贴到你的 ~/.bashrc 或从 ~/.bashrc 调用的任何文件(例如 ~/.bash_completion)中混乱。这是完成代码:
_..()
{
local cur=../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _.. -o nospace -S / ..
_..2()
{
local cur=../../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _..2 -o nospace -S / ..2
不记得我从哪里复制了这个函数,但它对我很有用(例如,你可以放入.bashrc
文件中)
up() { local p= i=${1:-1}; while (( i-- )); do p+=../; done; cd "$p$2" && pwd; }
例如,要向上 7 个目录,必须键入up 7
你可以这样做cd ../../../../../../../
有一篇很酷的文章,介绍了一些可以用来改进导航的技巧。
for i in {1..7}; do cd ..; done
嗯,我不这么认为。
但是你可以写cd ../../../..
(等等)而不是 7 次 cd ..
这个漂亮的功能支持双向上升。
如果您在/a/b/c/d中,则“up 1”将带您到/a/b/c,依此类推。那是非常标准的,并且在大多数其他答案中都涵盖了。
现在,对于特殊部分;使用负数会让你从另一个方向上升。所以,如果你在/a/b/c/d,'up -1' 会带你去/a,依此类推。
function up() {
UP=$1
if [[ $UP =~ ^[\-0-9]+$ ]]; then
if ((UP<0)); then
UP=${UP#-}
cd $(echo $PWD | cut -d/ -f1-$((UP+1)))
else
cd $(printf "%0.s../" $(seq 1 ${UP}));
fi
fi
}
可在github上下载/安装。
您可以将以下功能添加到您的.bashrc
:
# ~/.bashrc
up() {
for D in $(seq 1 $1);
do
cd ..
done
}
所以用法很简单:
user ~ $ up 3
user / $
我制作了一个小实用程序,可以更轻松地导航深层目录结构:https ://github.com/ianatha/up 。
安装后,up
您可以:
$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/service/db/
$ up example
$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/
$ up 4
$ pwd
/Users/jdoe/Developer/backend/src/
对于鱼类用户,
function cdd
for x in (seq $argv)
cd ..
end
end
并将其保存到您的:~/.config/fish/functions/cdd.fish
只需$ cdd 3
上 3 个目录。
你可以试试这个解决方案。这对我来说很好用:
#!/bin/bash
#this sctipt should take one parameter - number of steps. And do "cd" command step times.
# example usage: cd `cde 3`
NEW_PATH=$(pwd)
step="../"
upper=""
for i in seq $1
do
upper="$upper$step"
done
echo $upper
我在 ~/.barsh 文件中创建了别名。这对我来说很好。
例如,最多三个文件夹。
$cd `cde 3`