gst*_*ina 18 command-line bash directory
我们知道 usingcd <directory>会打开目录,如果它存在的话!
此外,cd ..将从当前工作目录带我们上一层。
但是,当我们有一个带有更长路径的嵌套目录时/home/thina/teams/td/tech/app/release/apks,进入文件夹很累apks,也很难回到另一个节点,比如这里/home/thina/teams。
有没有办法跳过的打字cd和cd ..?我正在使用 Ubuntu 16.04。
Jos*_*Jos 33
有pushd和popd:
pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command
Run Code Online (Sandbox Code Playgroud)
尝试help pushd和help popd更多的选择。没有man页面,因为pushd和popd是 bash 内置命令。
Arr*_*cal 17
除了已经提供的非常好的答案之外,这里还有一些关于cd有效使用的提示。
cd - 将带您回到您所在的最后一个目录。cd ../../..将一次带您上 3 个级别,您可以使用..链接在一起的符号“上移”任意数量的
目录。cd ..,然后通过按下箭头键再次使用该命令来使用 bash 历史记录。~在静置当前用户的主目录,如果你在为用户thina登录,cd ~/teams将带你到/home/thina/teamscd命令中的一段路径,如果您键入路径段的一部分,后跟Tab,则该段将在没有其他有效选择的情况下补全。例如,如果您输入cd /home/thina/teams/td/t然后按下Tab,那么只要 td 目录中没有以字母 t 开头的其他文件或目录,就会为您填写 tech 一词。一起使用这些技巧可以使遍历目录的cd痛苦少得多。
要一次在树中上升多个级别,您可以使用以下功能(感谢 muru 的增强版本):
up ()
{
local old="$PWD"
for i in $(seq "${1:-1}"); do
cd ..
done
OLDPWD="$old"
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams
Run Code Online (Sandbox Code Playgroud)
此外:
up不带参数调用相当于cd ..由于${1:-1}哪些替代品$1时集和1以其它方式cd ..旨在保留通常的cd -行为。对于长目录名称,请使用具有完整路径的变量。例如,
APKS="/home/thina/teams/td/tech/app/release/apks"
Run Code Online (Sandbox Code Playgroud)
然后你可以做 cd "$APKS"
至于上升 x 个目录,我在我的 .bashrc
goup() # go up x number of dirs
{
num=$1
while [ $num -ne 0 ];do
cd ..
num=$( expr $num - 1 )
done
}
Run Code Online (Sandbox Code Playgroud)
/home/thina/teams从apks你那里回来会做
goup 6
Run Code Online (Sandbox Code Playgroud)
下面是一个使用示例:
$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$>
Run Code Online (Sandbox Code Playgroud)
我想出的另一个小功能,但从来没有使用过这么多的bookmark功能。
这是它的工作原理:它将您当前的文件夹保存到某个文件,然后您可以根据该文件中的行号 cd 到特定目录。例子:
$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks )
$> pwd
/sys/class/backlight
Run Code Online (Sandbox Code Playgroud)
这是函数本身:
bookmark()
{ # bookmarks current dir
pwd >> $HOME/.dirsbookmarks
}
Run Code Online (Sandbox Code Playgroud)
更新:有一个比autojump:更强大的工具fasd,但我不熟悉它。
我很惊讶还没有人提到autojump哪个
通过从命令行维护您最常使用的目录的数据库来工作(必须首先访问目录,然后才能跳转到它们。)
这基本上是@graipher 构建的,还有一些额外的选项。
正如我在另一个问题中提到的:
在你 cd 几次到一个目录之后(即使一次就足够了):
cd /home/thina/teams/td/tech/app/release/apks
您可以使用快捷方式j快速移动到那里,无论您当前在哪个目录中:
j apks
请注意,使用路径的任何部分都有效,只要它是列表中的最高部分:
如果您去那里的次数多于 to ,j app也会带您.../apks到.../app。
我会推荐它而不是拥有自己的脚本,因为它维护良好,为 Ubuntu 分发,并且具有其他简洁的功能,例如跳转到 child:
.../td/tech $ jc apk
.../release/apks $
Run Code Online (Sandbox Code Playgroud)
已将您移至apksin td,而不是另一apks棵树下的其他一些。
小智 5
我有一个通过别名直接可用的常用目录列表。这还包括层次结构中目录的快捷方式。
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University
Run Code Online (Sandbox Code Playgroud)
现在,当我想要上三个级别时,我只需输入即可....<Enter>!