我正在寻找一种简单的方法来导航到跨越多个硬盘驱动器的目录,并希望在终端中设置相当于快捷方式的内容。
在 Windows 中,我将通过mklink
创建符号链接来跳转到目录或创建连接来将位置附加到当前文件路径的末尾来完成此操作。
因为这实际上只是关于导航,所以它也不需要是链接或任何东西,也许我可以设置一些环境变量,以便我可以cd $myDir
(最好)。
这样的事情可能吗,还是我真的需要更好地学习我的目录?
答案1
熟悉您的文件系统布局是成为一名合格用户的一部分——您花在这个目标上的任何时间都不是浪费时间。然而,话虽如此,您确实可以更轻松地在文件系统中移动。请注意,在 Linux/UNIX 中,无论有多少设备构成存储,文件系统都显示为单个树,这与 Windows 中的每个“驱动器”(物理或逻辑,取决于您的配置)表示不同。默认配置,由独立的树组成。
有多种方法可以解决这个问题。当然可以设置一堆 shell 变量,每个变量都指向不同的目录。发出命令cd $SomeDir
将导致 shell 扩展该变量$SomeDir
并在命令行中替换它,以便当它最终运行时,cd
接收到存储在变量中的目录的名称。这可能是最简单的方法,如果您使用绝对路径填充 shell 变量,它应该可以在文件系统中的任何位置工作。
您还可以使用目标目录的符号链接(大多数 UNIX 不支持目录的硬链接)。但是,为了使其有效,您仍然需要在路径参数中提供足够的信息以允许内核解析符号链接。也就是说,您需要提供符号链接的绝对路径,或者足够的相对路径以允许内核找到链接,以便内核可以遵循它。
另一种方法(根据您的 shell 的不同,可能可用或不可用)是使用 shell 的cdpath
功能。这在bash
、zsh
和tcsh
毫无疑问的其他方面得到了支持。使用此技术,您可以将环境变量设置CDPATH
为以冒号分隔的目录名称列表,当您运行cd
.如果 的目录之一$CDPATH
包含其名称与传递给 的子目录匹配的子目录cd
,则 shell 会更改其当前工作目录。例如,如果CDPATH
contains /usr/local
,并且如果您的系统有一个目录/usr/local/www
,则发出命令cd www
将查找 的内容$CDPATH
,尝试查找调用的子目录/usr/local
,www
如果存在,则将其当前工作目录更改为/usr/local/www
。请注意,shell 按照$CDPATH
指定的顺序搜索目录,因此如果$CDPATH
包含多个目录,其中包含您作为参数传递给 的子目录cd
,第一场比赛获胜。这让我经常陷入困境,以至于我不再是我们了cdpath
。
答案2
您可以设置一些别名,例如:
$ alias abc="cd /home/user/Desktop/Folder"
要长期存储这些内容,请将它们添加到您的 .bashrc 文件中。
如果您只是在寻找导航,这将起作用 - 但是如果您想编写任何脚本,上面的“abc”将没有任何用处。
我个人认为从长远来看,学习和记住目录结构的[相关部分]可能会很容易。太多的别名只会让您需要记住更多的东西,而且它们无法在您可能需要及时使用的不同计算机上工作。
答案3
我想推荐的是z公用事业 -https://github.com/rupa/z (这是受到另一个名为j)。
什么z所做的就是覆盖你的 shell 的cd
函数,以添加记录你访问的所有目录的副作用。这些目录~/.z
按“频率”降序存储在文件中,这样,如果访问次数越多且最近访问的目录越多,则该目录就会显得越高。
然后,当你使用cd
一段时间建立了这个索引后,你可以使用newz $DIR
命令跳转到包含$DIR
出现在最高位置的子字符串的目录~/.z
。
答案4
有$CDPATH
:
mkdir -p ./1/2/3/4/dir ./3/2/1/dir ./12/dir
CDPATH=":$HOME/1/2/3/4:$HOME/3/2/1:$HOME/12:"
cd dir
如果您将经常访问的中心路径列表放入其值中,则可以cd
访问它们的任何子路径,而无需指定完整路径。cd
会将您置于它找到的第一个匹配项中。stdout
当它出现时,它会打印你的位置:
输出:
/home/mikeserv/1/2/3/4/dir
这些值是:
用冒号分隔的 - 就像$PATH
- 所以如果你有疯狂的目录名,你可能会遇到问题。但它可能非常有用。这是POSIX 指定- 应该在任何现代外壳中工作,我期望:
cd ..; rm -rf dir; cd dir
输出:
/home/mikeserv/3/2/1/dir
不过,请确保使用:
冒号打开它的值 - 在大多数 shell 中,它$CDPATH
使您能够cd
访问当前目录的子目录,而无需前导./
- 这就是前导:
空字段所表示的内容。
正是由于这个原因,如果您也不想去,您不必担心它会让您去 - 如果您做使用合格的路径(基本上任何cd
以 a.
或 a开头的参数/
) cd
根本不解释它。