如何使用Bash(2015)更快地导航目录

2021-04-22 15:16:14

更改目录是我的日常工作中的一个非常频繁的活动,作为运行计算,分析数据和从终端的开发代码的知识工作者。实际上,更改目录是在不同任务,上下文或工作空间之间行走的基本操作模式。

当我第一次开始使用终端时,我知道的唯一命令是CD,但在整个年内,我注意到,在Bash的引擎盖下有很多更多,显着减少了改变目录所需的时间。下面我分享了五个技巧我经常使用以在目录之间跳跃。它们不仅可以帮助我移动更快,而且还可以降低记住长子的认知负荷。

此外,我使用所有技巧以获得最高效率,我希望他们也能让你更加富有成效。

此尖端仅侧重于使用CD命令的所有功能。使用CD最常见的形式是

其中目录可以是。/相关或/绝对路径。也是众所周知的是..是一个别名的目录上方的目录上方的别名../ ..是上面的目录上方等等。也许不太众所周知的是,是一个人的主目录的别名。但是,直接去那里的更快方式是跳过目录参数并刚使用

此外 - 是上一个目录的别名。所以CD - 就像CD的后退按钮,它适用于历史上的一步。使用CD - 反复在两个目录之间切换。

别名.. =" CD .."别名... =" CD ../" alias .... =" CD .. / .." alias ..... =" cd ../../../..& l#34; alias ...... =" CD ../ ../../../..& ... alias ....... =" CD ../../../../../.."别名........ =" CD ../../../../../../" alias ......... = " CD ../../../../../../../../../../../../../和...; alias .......... =" cd。 ./ ...... / ...'alias ........... =" cd ../ ../../../../../../../../../../../../../.." alias ............ =" CD。 ./../../../../../../../../../../../../../../../.." alias ............. = " CD ../../../../../../../../../../../../../../../../和...

只需添加点(...):-)可以为您带来更多目录。

另一个简洁的短手是!$这是前一个命令的最后一个参数的别名。如果创建一个新目录并且想要再次键入目录,则这可以方便。所以命令将是

下一个提示是有效使用CDPath变量。几乎每个使用shell的每个人都熟悉路径变量的重要性。路径变量意味着只要一个输入命令,shell将查找路径中列出的目录,搜索可执行文件,然后执行第一个可执行文件,以便在路径中列出的顺序找到命令命令。

因此,有一个名为CDPath的密切相关变量,它是CD的模拟。当你进入时

CD将搜索CDPath中列出的所有目录,并跳转到它以CDPath中列出的顺序查找的第一个目录。默认设置为CDPath =。,这意味着CD仅搜索当前工作目录。但没有理由停止在哪里。我的〜/ .bashrc包含导出cdpath = .:〜:〜/ src:〜/ calculation:〜/ ssh_mounts

使用此行,我始终可以直接直接跳转到当前目录下面的任何目录,主目录,名为SRC的目录,用于软件项目,一个用于计算的目录,以及名为SSH_MOUNT的目录,可以链接到通过SSHFS程序链接的其他服务器。

这有助于为不同类型的活动保持各种类型的目录,同时还允许它们之间的快速变化。如果所有用户帐户只有一个〜/ .bashrc,它更强大。 git和bash完成

如果[-f / etc / bash_completion];然后 。 / etc / bash_completionelif [-f /opt/local/etc/profile.d/bash_completion.sh];然后 。 /opt/local/etc/profile.d/bash_completion.shfi.

它在目录名称中自动纠正小字母,并跳转到最佳猜测现有目录。或者

另一个命令不太清楚CD是PUSHD和POPD。 PUSHD代表推送目录,它更改当前工作目录,但也会将左侧留在历史迹堆栈上的目录。另一方面,POPD代表POP目录,它弹出历史堆栈中上一个访问的目录。命令Dirs列出当前堆叠在历史记录上的目录。例如,

PUSHD和POPD是两个非常伟大的命令,它们在脚本中非常有用,以便在shell脚本中干净地输入和退出目录。唯一的问题是为什么有这么多的字符类型,为什么CD内置的CD没有该功能。要修复以下两个功能,请将以下两个功能放入〜/ .bashrc哪个覆盖CD:

函数cd(){如果[" $#" =" 0" ]然后按下$ {home}> / dev / null elif [-f" $ {1}" ]然后$ {编辑} $ {1} else pushd" $ 1" > / dev / null fi}函数bd(){如果[" $#" =" 0" ]然后popd> / dev / null each i for i $(seq $ {1})do popd> / dev / null完成fi}

BD也接受一个数字n作为一个参数,让您一次退回N目录

如果CD参数是文件而不是目录,它将假设您要将其编辑为文本文件并在您喜欢的编辑器中打开它。

您仍然可以使用Dirs列出历史记录并将上述功能调整到您的口味。

当我键入ls检查当前目录的内容并决定要移动到其中一个子目录:为什么我必须再次键入它(或者至少足够足以完成工作),即使目录名称已打开屏幕?这是别名背后的想法

别名lln =" ls -lhtr - 时间式的long-iso | TAC |猫-N | TAC | sed -s' s / ^ \ s * \([0-9] * \)\ s * \(。* \)/ [\ 1] \ 2 [\ 1] /' g&amp ;& PWD"函数lf(){如果[" x $ {1}" ==" x"然后n = 1否则n =" $ {1}" fi ls -rt1 |尾巴 - $ {n} | head-n 1}

现在,键入LLN将显示当前目录已订购的时间与底部的最新文件。但是,您还会注意到围绕以最新文件开始的索引侧翼的索引。

或者lf(1是默认参数)将生成分配给索引的文件名。如果这是一个目录,我可以将CD $(LF 1)发出到ChangeInto最新目录。当然,我可以将LF与任何其他人合并,如例如。

最后一个提示旨在更快地检索历史记录的命令。通常,Up-arrow跳转到历史记录中的前一个命令。然而,如果一个跳跃在历史记录中的命令5或10个或更多命令,这很快就会变得非常乏味。相反,如果你放了

进入您的/.bashrc并开始键入命令的一部分,它只将跳转到历史记录中的命令,该命令以命令的相同片段开始。这对于任何命令行工作都很有用,并且您可能已经知道如果是从例如例如来自iPython,但它对CD也很有用。所以