有哪些好的 Linux 命令可以更轻松地在命令行上在不同目录之间切换?
我经常需要在名称较长的不同目录之间切换,例如
cd foo/20100801-rev124-test2
ls
cd ../20100801-rev124-test1
ls
cd ../20100802-rev126-bar
通常,我使用制表符补全,因此它是这样的:
cd ../2010080 Tab2 Tab-rev12 Tab6-Tab条
但这很烦人,因为所有这些名称都非常相似,因此制表符补全实际上并没有节省太多工作。
在这种情况下,您会使用什么技巧来减少打字?
pushd
顺便说一句,我有时确实会使用popd
,但在这里它不会有太大帮助,因为我没有按照给定的顺序访问目录。
更新:
欲了解更好的解决方案,请参阅接受的答案对我的另一个,相关问题基本上,只需创建一个替代cd
命令:
function cd2 { select a in $1*; do cd $a; break; done }
它将立即列出所有可能的完成:
$ cd2 2010080
(1) 20100801-rev124-test2
(2) 20100801-rev124-test1
(3) 20100802-rev126-bar
您可以通过输入编号来选择一个。
答案1
该dirs -v
命令将列出目录堆栈,每个目录前面都有数字,您可以为命令提供一个数字参数,pushd
让其跳转到该目录。例如,如果dirs -v
显示您想要更改到的目录2
在其前面(即列表中的第三个目录),则执行pushd +2
将更改到该目录。
为了节省输入,您可以通过赋予这些命令别名来缩短它们,如下所示:
alias dv="dirs -v"
alias pd=pushd
答案2
您可以使用通配符:
cd ../*test1 or even cd *t1
cd ../2010*test2
cd ../*bar
它们更加灵活,您不需要为每种不同情况规划脚本,一旦您习惯了它们,您就可以将它们用于所有类型的目录。示例:
cd /e*/n*k will take you to /etc/network
cd /h* to /home
它们可以在任何地方使用(ls
当然你也可以过滤想要查看的内容)
答案3
- 尝试使用 hist 命令调出您已执行的所有命令的历史记录。
- 为您经常使用 cd 转到的每个目录创建一个包含 cd 命令的 shell 脚本。
答案4
对于这样的问题,我想说一下你使用的 shell。每个 shell 的工具略有不同。我在这里的答案适用于 bash,也就是你大概使用。
此外,对于“Frank Computer”,您不能使用 shell 脚本,它会创建自己的进程,cd 在该进程中,退出,并且您当前的 shell 仍然在您所在的位置。
我认为“别名”是你的朋友。添加类似以下内容:
alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2'
到你的 .bashrc (或 .kshrc 或 zshrc)
bash 还具有环境变量CDPATH
,可将其用作 cd 进入相对路径的锚点。例如:
CDPATH=/usr:.; cd bin
会看到有一个,/usr/bin
并将您放在那里,如果没有,则将您放在./bin
。这可能对您没有帮助,因为您可能必须输入整个子目录才能使其工作:
CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2
我认为 alias 是你能得到的最好的工具,至少在 bash 中是这样。zsh 中可能会有更好的工具。