当前位置: 首页 > 科技观察

Linux下如何高效切换目录?

时间:2023-03-13 02:20:18 科技观察

Linux下的目录切换,大家肯定会想到一个命令:cd命令。这是Linux下最基本的命令。如果你不知道这个命令,就去自杀吧。cd命令确实很方便,但是如果你需要经常在以下目录之间切换,你可能会怀疑人生:/home/alvin/projects/blogdemos/linux-system-programming/thread/home/alvin/projects/blogdemos/diff/home/harry/study/日本文化/中日交流/电影行业/动作电影如果你只知道cd命令,那么你需要一直cd到你发疯。在这种情况下,我们如何高效地切换目录呢?良旭会介绍三个命令:pushd、popd、dirs。这三个命令实际上是对目录栈进行操作的,目录栈是保存目录的栈结构。栈顶结构总是存放当前目录(敲黑板,重点!!)。有编程基础的同学都知道栈遵循后进先出的原则。也就是说,在栈结构中,后入栈的元素会先出栈。在回顾了基本概念之后,让我们详细了解这三个命令。显示目录堆栈内容:dirsfirstdirs。这个命令很简单,就是显示目录栈的内容。它有以下三个常用的选项:选项含义-p每行显示一条记录-v每行显示一条记录,并显示记录在栈中的索引-c清空目录栈,-p和-p的区别-v选项是,-v选项会显示栈中每条记录的索引,否则完全一样。如果现在有目录栈,我们看看里面有什么:[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir12~/test/dir33~/test请注意,最顶层元素始终与当前目录一致。如果在其他目录下查看目录栈,第一个元素会相应变化。同样,如果使用后面介绍的pushd和popd操作目录栈,则当前目录会切换到目录栈第一个元素对应的地址。如果我们要清除目录栈,直接使用-c选项即可。[alvin@VM_0_16_centosdiff]$dirs-c[alvin@VM_0_16_centosdiff]$dirs-v0~/projects/blogdemos/diffpushedintothedirectorystack:pushd每执行一次pushd命令后,默认执行一条dirs命令显示目录堆栈内容。pushd的用法主要有以下几种:(1)pushd+directory如果pushd直接和一个目录一起使用,会切换到该目录,并将该目录置于目录栈顶。示例:[alvin@VM_0_16_centostest]$pushddir1~/test/dir1~/test[alvin@VM_0_16_centosdir1]$pushd../dir2~/test/dir2~/test/dir1~/test[alvin@VM_0_16_centosdir2]$pushd../dir3~/test/dir3~/test/dir2~/test/dir1~/test[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir22~/test/dir13~/test(2)pushd(withoutanyparameters)不带任何参数的pushd的作用是交换目录栈顶部的两个目录。前面我们强调过,目录栈的第一个元素是和当前目录相关的,所以当第一个元素发生变化时,当前目录也会随之切换,反之亦然。[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir22~/test/dir13~/test[alvin@VM_0_16_centosdir3]$pwd/home/alvin/test/dir3[alvin@VM_0_16_centosdir3]$pushd~/test/dir2~/test/dir3~/test/dir1~/test[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2#对应的目录变了[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir3#交换索引0和1的内容2~/test/dir13~/test(3)pushd+/-npushd+/-n是直接切换到索引值对应的目录。请注意,这里可以同时使用加号和减号。如果是加号,则从目录栈的上到下计数,如果是减号,则从目录栈的下到顶计数。接下来,我们回到本文开头的问题。如果我们要频繁地在两个或多个路径较长的目录之间切换,应该怎么办呢?首先,我们使用pushd+directory将这些路径添加到目录栈中;然后,使用pushd+/-n在不同目录之间快速切换。具体演示如下:[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir32~/test/dir13~/test[alvin@VM_0_16_centosdir2]$pushd+2~/test/dir1~/test~/test/dir2~/test/dir3[alvin@VM_0_16_centosdir1]$pwd/home/alvin/test/dir1[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir23~/test/dir3弹出目录栈:popd在每次执行popd命令后,默认会执行一条dirs命令,显示目录栈的内容。popd的主要用法如下:(1)popd(不带任何参数)popd不带任何参数的作用是将目录栈顶的元素弹出出栈。这时候栈顶元素发生变化,自然当前目录也会随之切换。[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir12~/test3~/test/dir2[alvin@VM_0_16_centosdir3]$popd~/test/dir1~/test~/test/dir2[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir2(2)popd+/-n删除目录栈中的第n个元素。同样,加号和减号表示是从上到下还是从下到上计数。[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir2[alvin@VM_0_16_centosdir1]$popd+1~/test/dir1~/test/dir2[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test/dir2本文经授权转载自公众号「良序Linux」。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!